代码随想录训练营第二天|977、有序数组的平方,209、长度最小的子数组,59,螺旋矩阵(暂停明天搞,需要深入了解)

leetcode 977 有序数组的平方

题目链接:977、有序数组的平方

今日学习:

文章链接:代码随想录纸质版

视频链接:代码随想录b站视频

第一思路:

这道题暴力解法还是很简单的,首先数组有序,因此将数组元素平方之后进行快排就能找出,也是我思路最快的一次😂。

第二思路:看完视频以及书之后,明白了双指针法在这道题里面的用处,由于数组有序因此最大的数一定是在数组的两侧而不是中间,因此将双指针分别位于数组的两侧,向中间进行靠拢比较,大的数就放入result数组的终止位置(要提前建立好result数组和表示数组下标的k变量),这样就能完成从小到大的排序。

代码实现:

class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
        int k =nums.size() - 1;
        vector<int> result(nums.size(),0);
        for(int i = 0,j = nums.size() - 1;i <= j;) {
            if(nums[i]*nums[i]<nums[j]*nums[j]) {
                result[k--] = nums[j]*nums[j];
                j--;
            }
            else{
                result[k--] = nums[i]*nums[i];
                i++;
            }
        }

        return result;
    }
};

这个思路看起来还是蛮简单的,就是第一时间想不出来,要是没有前面那一道双指针的题目引导,那更是想不出来。

至此完成了977的学习,记得提升语法基础。

leetcode 209 长度最小的子数组

题目链接:209、长度最小的子数组

今日学习:

文章链接:代码随想录纸质版

视频链接:代码随想录b站视频

第一思路:

这道题对我来说有点懵,而且今天时间不是很充裕了,因此就直接看了题解的思路

第二思路:看完视频以及书之后,看似叫滑动窗口,实则还是双指针法的应用,首先是创建一个result变量用来返回子数组的长度,然后是创建一个i表示滑动窗口的起始位置,j则表示滑动窗口的终止位置,这样先进行终止位置的遍历,在这个过程中起始位置不变,知道出现sum大于等于target之后,利用while循环,让起始位置不断的向后移动,在此过程中,要判断子数组的长度是否小于result,以便及时更新,同时每一次成功移动之后,都要将sum减去当前初始位置的元素。

如果没有合适的子数组,则返回0。

代码实现:

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int result = INT32_MAX;
        int sum = 0;
        int i = 0;
        int sublength = 0;
        for(int j = 0;j <= nums.size() - 1;j++) {
            sum += nums[j];
            while(sum >= target) {
                sublength = j - i + 1;
                result = result < sublength ? result : sublength;
                sum -= nums[i++];
            }
        }
        return result == INT32_MAX ? 0 : result;
    }
};

思路很巧妙,一定要二刷一遍,以此巩固知识。

至此完成了209的学习,记得提升语法基础。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值