代码随想录训练营day2

一、有序数组的平方 

1.1暴力解法

可以直接使用C++当时自带的排序算法库函数进行计算,属于暴力解法,复杂度较高,那么有没有运行效率更高的算法思想呢?

class Solution {
public:
    vector sortedSquares(vector& nums) {
        for(int i=0;i
1.2双指针法
class Solution {
public:
    vector sortedSquares(vector& nums) {
       int k=nums.size()-1;
       int i,j;
       vector result(nums.size(),0);
       for(i=0,j=nums.size()-1;i<=j;){
           if(nums[i]*nums[i]

二、长度最小的子数组

2.1暴力解法:使用两层for循环进行运算

暴力解法确实可以进行运算,但是当测试的数组很多数字的时候,就超时了

class Solution {
public:
    int minSubArrayLen(int target, vector& nums) {
        int result=INT32_MAX;
        int sum=0;
        int length=0;
        for(int i=0;i=target){
                    length=j-i+1;
                    result=result
2.2使用滑动窗口进行运算

在这里要格外注意为什么使用while(sum>target)而不是if(sum>target)来判断

class Solution {
public:
    int minSubArrayLen(int target, vector& nums) {
       int result=INT32_MAX;
       int sum=0;
       int i=0;
       int j=0;
       int length=0;//子数组的长度
       for(j=0;j=target){
               length=j-i+1;
               result=result

三、螺旋矩阵

在这里主要是我们要提前规定好怎么查询,有规律得查询才能不会发生错误的查询和排序

class Solution {
public:
    vector> generateMatrix(int n) {
        vector> res(n, vector(n, 0));
        int startx=0;
        int starty=0;
        int count=1;
        int offset=1;
        int loop=n/2;
        int mid=n/2;
        int i=0,j=0;
        while(loop--){
            i=startx;
            j=starty;
            for(j=starty;jstartx;j--){
                res[i][j]=count++;
            }
            for(;i>startx;i--){
                res[i][j]=count++;
            }
            startx++;
            starty++;
            offset++;
        }
        if(n%2!=0){
            res[mid][mid]=count;
        }
        return res;
    }
};

你可能感兴趣的:(代码随想录训练营,算法,leetcode,数据结构)