代码随想录算法训练营第二天| 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II ,总结

状态:977:写了半天55,穷举法超时了,看了视频后自己写的代码是:

class Solution {
public:
    vector sortedSquares(vector& nums) {
        vector v;
        v.resize(nums.size());
        int left=0,right=nums.size()-1,k=nums.size()-1,tmp;
        while(left<=right)
        {
            if(abs(nums[left])>abs(nums[right]))
            {
                tmp=nums[left++];
            }
            else
            {
                tmp=nums[right--];
            }
            v[k--]=tmp*tmp;
        }
        return v;
    }
};

209:知道思想了,代码没运行对。第二天运行出来了,放一个nums[j]即判断一次,我写的太啰嗦了自己都绕晕了。注意判断的时候(for循环里面)是while循环不是if语句,能够保证sum是>=target的最小值。

class Solution {
public:
    int minSubArrayLen(int target, vector& nums) {
        int i=0,j=0,minlen=INT32_MAX;
        int sum=0;
        for(int j=0;j=target)
            {
                int len=j-i+1;
                minlen=minlen

59:第二天看了视频写出来了运行无结果,发现是因为没有给容器提前分配空间(注意!!!)

和二分法一样注意循环不变量原则,如果是[),就一直得是[),保持一致。

class Solution {
public:
    vector> generateMatrix(int n) {
        vector> vv(n, vector(n, 0));
        int k=1;
        for(int i=0;ii;j--)
            {
                vv[n-1-i][j]=k++;
            }
            for(int j=n-1-i;j>i;j--)
            {
                vv[j][i]=k++;
           }

        }
        if(n%2==1)vv[n/2][n/2]=n*n;
        return vv;
    }

};

你可能感兴趣的:(算法,leetcode,数据结构)