- 数组
- 704. 二分查找
- 27. 移除元素
- 977.有序数组的平方
- 209.长度最小的子数组
- 59.螺旋矩阵II
- 问题记录
法1:
法2:
1.【C++】array和vector,数组三者区别和联系
2.int left / int right 可以再定义,我的方法就是忘记int i了
3.vector中的函数有size(),我的方法是length太低级了,详见 c++中vector的用法详解
4.法2中右开的话直接nums.size()即可
27. 移除元素1.双指针的思想不错
977.有序数组的平方1.双指针的方法把我秀到了
209.长度最小的子数组my code:
class Solution {
public:
int minSubArrayLen(int target, vector& nums) {
int min = nums.size();
int sum = 0;
for(int i = 0; i < nums.size(); i++){
sum += nums[i];
}
if(sum < target){
return 0;
}
for(int i = 0; i < nums.size(); i++){
int j = i;
sum = 0;
while(sum < target && j < nums.size()){
sum += nums[j];
j++;
}
if(sum >= target){
min = (j - i) < min ? (j - i) : min;
}
}
return min;
}
};
滑动窗口法:
class Solution {
public:
int minSubArrayLen(int s, vector& nums) {
int result = INT32_MAX;
int sum = 0; // 滑动窗口数值之和
int i = 0; // 滑动窗口起始位置
int subLength = 0; // 滑动窗口的长度
for (int j = 0; j < nums.size(); j++) {
sum += nums[j];
// 注意这里使用while,每次更新 i(起始位置),并不断比较子序列是否符合条件
while (sum >= s) {
subLength = (j - i + 1); // 取子序列的长度
result = result < subLength ? result : subLength;
sum -= nums[i++]; // 这里体现出滑动窗口的精髓之处,不断变更i(子序列的起始位置)
}
}
// 如果result没有被赋值的话,就返回0,说明没有符合条件的子序列
return result == INT32_MAX ? 0 : result;
}
};
59.螺旋矩阵II
问题记录
- 时间复杂度和空间复杂度如何判断
- vscode上刷leetcode方便吗



