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.有序数组的平方
最简单的方法应该时双指针,通过比较两端的绝对值来将结果赋给返回的数组中,注意的一点就是要求升序排列,因此赋值需要倒着赋值。
文章介绍了三个编程问题的解决方案,包括螺旋矩阵的生成,通过滑动窗口求解长度最小的子数组,以及使用双指针解决有序数组的平方问题。每个问题都涉及特定的算法思路,如按层赋值、滑动窗口优化和双指针排序。

被折叠的 条评论
为什么被折叠?



