关于leetcode:Day2

1次阅读

共计 618 个字符,预计需要花费 2 分钟才能阅读完成。

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

正文完
 0