本文是计划花一些时间学习《代码随想录》时做一个记录,水平有限,可能理解有误,内容摘抄总结自Carl大佬的,感谢大佬开源的面向算法初学者的好资料
704二分查找
向大家推荐vscode插件 tabnine 插件,刷力扣的时候经常用,很强大的ai提示工具,可以提示出来很多东西。
704二分查找
while循环控制查找区间
27移除元素
快慢指针法,时间O(n)
27移除元素
977有序数组的平方
题目平方这里没什么好弄得,主要是处理有序数组负数平方后的排序混乱。
977有序数组的平方
我直接stl了。
sort(nums.begin(), nums.end(), [](int i, int j) {
return abs(i) < abs(j);
});
用了sort排序了,再看carl大佬的题解,原来已经是有序的了,只需要考虑正负数,一头一尾双指针往中间凑,一试时间确实更快,两种方法空间复杂度都是一样的,大概C库函数的排序使用了额外O(n)空间。
209长度最小的子数组
209长度最小的子数组
滑动窗口,主要得注意一些边界条件,提交了很多的wa
- 样例整体加起来不够target
- 样例整体加起来正好target
- 我做的时候一开始先递增指针再算长度,属实是🐖B了
59.螺旋矩阵II
主要是对过程做一个模拟,
- 按每一个外环作为一个子步骤,做循环
- 或者设定四个循环状态(右下左上),在这个方向走不动的时候(超出边界或单元格已经赋值)就改到下一个状态
复杂度不知道怎么优化,上面这两种都是一样的,写代码的话还是第一种比较快速
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> matrix(n, vector<int>(n, 0));
int col = 0,row = 0;
int loop = 0,i = 1;
while(loop <= n/2){
for(;col<n - loop;){
matrix[row][col] = i++;
col++;
}
col--;row++;
for(;row<n - loop;){
matrix[row][col] = i++;
row++;
}
row--;col--;
for(;col>=loop;){
matrix[row][col] = i++;
col--;
}
col++;row--;
for(;row>=loop+1;){
matrix[row][col] = i++;
row--;
}
row++;col++;
loop++;
}
return matrix;
}
};