算法训练营补day2(10.31)

2024-12-13  本文已影响0人  无心浪子

题目1: 209. 长度最小的子数组
代码:

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int minSize = INT_MAX;
        int sum = 0;
        for(int left = 0, right = 0; right < nums.size(); right++) {
            sum += nums[right];
            while(sum >= target) {
                if(minSize > right - left + 1) {
                    minSize = right - left + 1;
                }
                sum -= nums[left];
                ++left;
            }
        }
        return minSize == INT_MAX ? 0 : minSize;
    }
};

题目2: 59. 螺旋矩阵 II
代码:

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> ans(n, vector<int>(n));
        int startx = 0;
        int starty = 0;
        int offset = 1;
        int curNum = 1;
        int loop = n / 2;
        while(loop--) {
            int i = startx;
            int j = starty;

            for(; j < n - offset; j++) {
                ans[i][j] = curNum++;
            }
            for(; i < n - offset; i++) {
                ans[i][j] = curNum++;
            }
            for(; j > starty; j--) {
                ans[i][j] = curNum++;
            }
            for(; i > startx; i--) {
                ans[i][j] = curNum++;
            }
            ++startx;
            ++starty;
            ++offset;
        }
        if(n % 2 == 1) {
            ans[n / 2][n / 2] = n * n;
        }
        return ans;
    }
};
上一篇 下一篇

猜你喜欢

热点阅读