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的用意