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