状态:不熟练啊呜呜呜呜呜呜时长:2h40min别骂了啊啊啊啊啊啊啊啊菜菜
977.有序数组的平方
题目建议: 本题关键在于理解双指针思想
蒙眼:想不到怎么一遍for代替两遍for,只能是先平方后bubblesort手动狗头
sos!在看视频的时候发现丢了一个条件!从负到正生序排列
下次多观察!
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
vector<int> results(nums.size());
int k = nums.size()-1;
for(int i = 0, j = nums.size()-1; i<=j;){
if((nums[i]*nums[i])>=(nums[j]*nums[j])){
results[k--] = nums[i]*nums[i];
i++;
}else{
results[k--] = nums[j]*nums[j];
j--;
}
}
return results;
}
题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
文章讲解:代码随想录
视频讲解: 双指针法经典题目 | LeetCode:977.有序数组的平方_哔哩哔哩_bilibili
209.长度最小的子数组
状态:终于做到了滑动窗口哇酷哇酷!
暴力:枚举所有区间情况求和,比大小。O(n^2)
子数组意思是顺序不变,好好好,我阅读理解真不错
题目建议: 本题关键在于理解滑动窗口,这个滑动窗口看文字讲解 还挺难理解的,建议大家先看视频讲解。 拓展题目可以先不做。
滑动窗口:
- 如何移动起始位置
- 本人认为,仅这道题而言(避免underfitting),采用滑动窗口是出于观察最小子序列是数字本身,最大子序列是完整序列。所以想法是看看最大窗口能收缩到哪。(我第一遍读题以为是抽取数字所以没解对)
题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
文章讲解:代码随想录
视频讲解:拿下滑动窗口! | LeetCode 209 长度最小的子数组_哔哩哔哩_bilibili
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int result = INT32_MAX;
int sum = 0;
int i = 0;
int subL = 0;
for(int k = 0; k<nums.size();k++){
// end position
sum+=nums[k];
subL++;
while(sum>=target){
sum-=nums[i++];
// move start position
subL--;
result = result < subL ? result : subL;
}
}
if(result==INT32_MAX) return 0;
else{
return result+1;
}
}
};
全局最优:因为总能有机会更新到最小。
59.螺旋矩阵II
题目建议: 本题关键还是在转圈的逻辑,在二分搜索中提到的区间定义,在这里又用上了。
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> matrix(n, vector<int>(n));
// [)
int offset = 0;
int i, j = 0;
int count = 1;
int iter = n;
while(iter/2>0){
for(j=offset;j<n-offset-1;j++){
matrix[i][j]=count++;
}
for(i=offset;i<n-offset-1;i++){
matrix[i][j]=count++;
}
for(j=n-offset-1;j>offset;j--){
matrix[i][j]=count++;
}
for(i=n-offset-1;i>offset;i--){
matrix[i][j]=count++;
}
offset++;
i=offset;
j = offset;
iter-=2;
}
if ((n & 1) == 1) {
matrix[n/2][n/2] = count;
}
return matrix;
}
};
题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
文章讲解:代码随想录
视频讲解:一入循环深似海 | LeetCode:59.螺旋矩阵II_哔哩哔哩_bilibili
有点小粗心:走位题要考虑循环最后落脚在哪(因为会有跳出循环到判断,要知道下一次从哪里走)这道题主要是区间范围。
总结:
呃呃光是练了5题感觉容易underfitting。只练习了双指针,大体上逻辑是一遍for循环代替两遍for循环。一个用于遍历,一个动态调整。数组还需要注意区间,合法区间的概念很重要,注意n/2都取下界,所以一般左闭,右边开不开保持一致就行,哈哈,熟练就好。
key concepts:
滑动窗口,区间
先这样,哈哈