代码随想录算法训练营第二天

LeetCode 977.有序数组的平方
class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
        int l=0,r=nums.size()-1;
        int k=r;
        vector<int> result(nums.size(),0);
        while(l<=r){
            if(nums[r]*nums[r]>=nums[l]*nums[l]){
                result[k--]=nums[r]*nums[r];
                r--;
            }
            else{
                result[k--]=nums[l]*nums[l];
                l++;
            } 
        }
        return result;
    }
};

这个题目感觉比较简单,当然是我能够简单理解双指针做法,我自己做只会暴力

需要注意的就是每次是从result末尾的地方开始插入k=r。

LeetCode 209.长度最小的子数组
class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int sum=0,temp=0,result=INT32_MAX,i=0;
        for(int j=0;j<nums.size();j++){
            sum+=nums[j];
            while(sum>=target){
                temp=j-i+1;
                result=result<temp?result:temp;
                sum-=nums[i++];
            }
        }
        return result==INT32_MAX ? 0:result;
    }
};

看了一遍卡哥思路自己写的,感觉没什么特别难理解的地方,但是就是想不出来这种方法

学习一下两个宏INT32_MAX和INT32_MIN分别代表int类型下可以存储的最大正整数和最小值负整数,这两个宏在头文件<limits.h>中定义

LeetCode 59.螺旋矩阵||
class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> res(n,vector<int>(n,0));
        int startx=0,starty=0,i=startx,j=starty;
        int count=1;
        int offset=1;
        int loop=n/2;
        while(loop--){
            i=startx;
            j=starty;
            for(j=starty;j<n-offset;j++){
                res[i][j]=count++;
            }
            for(i=startx;i<n-offset;i++){
                res[i][j]=count++;
            }
            for(;j>starty;j--){
                res[i][j]=count++;
            }
            for(;i>startx;i--){
                res[i][j]=count++;
            }
            startx++;
            starty++;
            offset++;
        }
        if(n%2)res[startx][starty]=count;
        return res;
    }
};

这个可以看卡哥的一入循环深似海视频,讲解的很清楚,感觉没什么要补充的,注意的就是将一次转圈分为不同的四个部分,且要保证每次循环不变量。

还有要注意的一点就是在while循环中第一步必须得给i和j赋初值,否则力扣会判定你越界,通过不了。

总结

今天感觉比昨天更轻松一点,可能因为昨天理解了,今天的代码看一遍思路就能写的差不多,再接再厉。

最后附上卡哥对数组的专题总结

代码随想录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值