代码随想录算法训练营31期day#,力扣59+209+977

发布时间:2024年01月24日

其实也不清楚是不是day2…
59
给你一个按非递减顺序排序的整数数组 nums,返回每个数字的平方组成的新数组,要求也按非递减顺序 排序。

//sort!启动!
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;
    }
};

209
给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。

真的很容易超时…

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        //INT32_MAX是C++中<limits.h>头文件中定义的常量,表示32位带符号整数类型int的最大值。其值为2147483647,即2^31-1
        //求最小值,先初始化最大值
        int res=INT32_MAX;
        int sum=0;
        int i=0,j=0;//双指针一前一后找最短长度
        while(j<nums.size()){
            sum+=nums[j++];//右指针往右推进,注意这里推完后j会加1,所以求长度不需要再加
            while(sum>=target){
                res=min(res,j-i);
                sum-=nums[i++];//左指针往右推进,缩小长度更新
            }
        }
        return res==INT32_MAX?0:res;
    }
};

59
给定一个正整数 n,生成一个包含1到n^2所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        //定义了一个n行n列的二维矩阵(即矩阵的大小为 n×n),并将其初始化为全零。
        vector<vector<int>> res(n,vector<int>(n,0));
        //坐标填数,右下左上
        int dx[4]={0,1,0,-1};
        int dy[4]={1,0,-1,0};
        for(int i=0,x=0,y=0,d=0;i<n*n;i++){
        	//每填一个数都加1
            res[x][y]=i+1;
            //更新坐标
            int a=x+dx[d],b=y+dy[d];
            //如果行或者列到头了,就改一下d
            if(a<0||b<0||a==n||b==n||res[a][b]){
                d=(d+1)%4;//d是几,取决于这是第几次转弯
                a=x+dx[d],b=y+dy[d];
            }
            x=a,y=b;
        }
        return res;
    }
};
文章来源:https://blog.csdn.net/weixin_45962681/article/details/135820202
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。