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

 977.有序数组的平方

暴力解

复制代码
class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {

            for (size_t i = 0; i < nums.size(); ++i) {
                nums[i] *= nums[i]; 
            }
            sort(nums.begin(),nums.end());
            return nums;
    }
};
复制代码

开始没想到的双指针版本

复制代码
class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
        vector<int> nums1(nums.size(),0); // 扩容
        int i = 0;
        int j = nums.size()- 1;
        int k = nums.size() - 1;
        int left = 0,right = 0;
        while(i <= j) {
            left = nums[i]*nums[i];
            right = nums[j]*nums[j];
            if (left < right) {
                nums1[k--] = right;
                j--;
            }
            else {
                nums1[k--] = left;
                i++;
            }
        }
        return nums1;
    }
};
复制代码

209.长度最小的子数组

滑动窗口

复制代码
// 自己的版本
class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
            int minlength = INT32_MAX;
            int currlength = 1;
            int i = 0, j = 0;
            int sum = nums[0]; // 滑动窗口的值
            while (i <= j && j < nums.size()) {
                if (target > sum) {
                    j++;
                    if (j >= nums.size()) break;
                    sum += nums[j];
                    currlength++; 
                } else {
                    minlength = min(minlength,currlength);  // 取最小值
                    sum -= nums[i];
                    i++;
                    currlength--;
                }
            }
            return minlength == INT32_MAX ? 0 : minlength;
    }
};
复制代码

 学习完优化版本

复制代码
class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
            int minlength = INT32_MAX;
            int currlength = 0;
            int i = 0;
            int sum = 0; // 滑动窗口的值
           for (int j = 0; j < nums.size();++j) {
               sum += nums[j];
               while (sum >= target) {
                   currlength = j - i + 1;
                   minlength = min(minlength,currlength);
                   sum = sum - nums[i++];
               }
           }
            return minlength == INT32_MAX ? 0 : minlength;
    }
};
复制代码

 59.螺旋矩阵II

复制代码
class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> result(n,vector<int>(n,0));
        int num = 1;
        int i = 0;
        int j = 0;
        int loop = n / 2;
        int loop_num = 1;
        while(loop--) {
            while(j < n - loop_num) {
                result[i][j++] = num++;
            }
            while(i < n-loop_num)  {
                result[i++][j] = num++;
            }
            while(j >= loop_num) {
                result[i][j--] = num++; 
            } 
            while(i >= loop_num) {
                result[i--][j] = num++;
            }
            i++;  // 每层结束,开始位置都要增加
            j++;
            loop_num++;
        }
        if ((n % 2) != 0) result[n/2][n/2] = num;
        return result;
    }
};
复制代码

 

posted @   MasEne  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示