Day2
977.有序数组的平方
题目倡议: 本题关键在于了解双指针思维
暴力解法:先平方 ,后排序。
双指针法
左正数,两头靠近零,右负数,平方后两边大两头小
左右2个指针从头开始,相互比大小,谁更大就把值赋给新的数组,再向两头挪动一格,留神从数组的最大下标开始赋值以满足非递加。
留神i<=j否则最初一个元素无奈赋值到新数组中
209.长度最小的子数组
滑动窗口,也是双指针的一种
值大于s,比拟长度后左端就要向右挪动放大窗口
将开始的返回值设置为INT32_MAX,是int类型中最大的值
for外面套while,每次右端向右挪动单位一,如果满足>=s,左端继续向右挪动直到sum<s,之后进行下一次for循环,右端向右挪动一。
如果始终挪动,直到整个数组的和都无奈大于s,则返回0,阐明没有这样的子序列
其中2次应用" ? : "构造简化代码
工夫复杂度:只管for套了while,然而每个元素进出共2次,2*n 所以是O
(n)。
59.螺旋矩阵II
题目倡议: 本题要害还是在转圈的逻辑,在二分搜寻中提到的区间定义,在这里又用上了。
保持循环不变量准则
如图,区间左开右闭
vector<vector<int>> res(n, vector<int>(n, 0)); // 应用vector定义一个二维数组 j < n - offset; // offset 管制每一圈里每一条边遍历的长度 offset += 1;
留神n为奇数时最两头元素须要独自解决,赋值count
别忘了开始int middle的用意