977.有序数组的平方

每个元素平方然后排序

class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
        for(int i = 0; i < nums.size(); i++){
            nums[i] = nums[i] * nums[i];
        }
        sort(nums.begin(),nums.end());
        return nums;
    }
};

双指针:数组开始和结束往中间都是从大到小的,可以定义两个指针,往中间移动,然后新建一个数组,从后到前赋值

class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
        int i = 0,j = nums.size()-1, x= nums.size()-1;
        vector<int> result(nums.size());
        while(i <= j){
            int l = nums[i] * nums[i];
            int r = nums[j] * nums[j];
            if(l >= r){
                result[x] = l;
                i++;
            }else{
                result[x] = r;
                j--;
            }
            x--;
        }
        return result;
    }
};
滑动窗口:
左端右端都是起始位置,右端右移,当大于等于target时,记录长度。然后左端右移,右端也右移,直到大于等于target,记录长度。循环
class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int result = INT_MAX;
        int i = 0,sum = 0;
        for(int j = 0; j < nums.size(); j++){
            sum+=nums[j];
            while(target <= sum){
                result = min(result,j - i + 1);
                sum-=nums[i++];
            }
        }
        return result == INT_MAX ? 0 : result;
    }
};

59. 螺旋矩阵 II

确定四条边起始坐标,然后循环赋值

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        int t = 0;      // top
        int b = n-1;    // bottom
        int l = 0;      // left
        int r = n-1;    // right
        vector<vector<int>> ans(n,vector<int>(n));
        int k=1;
        while(k<=n*n){
            for(int i=l;i<=r;++i,++k) ans[t][i] = k;
            ++t;
            for(int i=t;i<=b;++i,++k) ans[i][r] = k;
            --r;
            for(int i=r;i>=l;--i,++k) ans[b][i] = k;
            --b;
            for(int i=b;i>=t;--i,++k) ans[i][l] = k;
            ++l;
        }
        return ans;
    }
};