刷题Day2|977.有序数组的平方,209.长度最小的子数组,59.螺旋矩阵I

文章介绍了三个编程问题的解决方案,包括螺旋矩阵的生成,通过滑动窗口求解长度最小的子数组,以及使用双指针解决有序数组的平方问题。每个问题都涉及特定的算法思路,如按层赋值、滑动窗口优化和双指针排序。

59.螺旋矩阵I

链接:59.螺旋矩阵I
这应该是今天三道题里面最难的一道题了,之前做出来过一次,时间久了还是忘记了,所以说二刷是非常重要的。
总的思路感觉还是要按照题目的要求一层层的进行赋值。设置好top、bottom、left和right后对每层赋值后再操作四个参数,进行下一层赋值。
在这里插入图片描述

class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        int t = 0;      // top
        int b = n-1;    // bottom
        int l = 0;      // left
        int r = n-1;    // right
        vector<vector<int>> ans(n,vector<int>(n));
        int k=1;
        while(k<=n*n){
            for(int i=l;i<=r;++i,++k) ans[t][i] = k;
            ++t;
            for(int i=t;i<=b;++i,++k) ans[i][r] = k;
            --r;
            for(int i=r;i>=l;--i,++k) ans[b][i] = k;
            --b;
            for(int i=b;i>=t;--i,++k) ans[i][l] = k;
            ++l;
        }
        return ans;
    }
};

209.长度最小的子数组

链接:209.长度最小的子数组
思路感觉依旧是滑动窗口的思路,不过笔者在解题时将每一次比较的右侧固定,使得左侧向右靠拢至条件满足,时间复杂度应该为O(n^2),最后讨论一下都不满足情况下的返回值。

977.有序数组的平方

链接:977.有序数组的平方
最简单的方法应该时双指针,通过比较两端的绝对值来将结果赋给返回的数组中,注意的一点就是要求升序排列,因此赋值需要倒着赋值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值