-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathChapter 1. Array Part 2
More file actions
29 lines (21 loc) · 2.21 KB
/
Copy pathChapter 1. Array Part 2
File metadata and controls
29 lines (21 loc) · 2.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
209 Minimun size Subarray sum
这道题用滑动窗口的思路来求解真的很ez
我的第一思路是,左指针遍历整个数组,然后右指针从右往左来移动,记录一下其中的sum,之后向右移动一下左指针,再让右指针从右往左移动,记录整个过程中的最小窗口
但是这样以来复杂度就是n2了
我看了看文章的解法,其实就是让两个指针都从左边开始,一开始的时候窗口是小的,sum也是小的,那么这时候就可以移动一个指针,去找能够大于等于target的窗口并记录,之后再移动左指针
感觉跟我的第一想法差不多,差异就是初始化的时候是大窗口还是小窗口
但是这个的时间复杂度给的是n,那我那个的算法的时间复杂度也可以看做是n了
tips:右边的指针是不会向左移动的,这也是为什么能够显著降低复杂度的原因,我一开始的想法是每次左指针移动,右指针也跟着动了
细节还是有很多的,写程序的时候需要各种注意
59 Sparal Matrix
ok, 这里面讲的循环不变量感觉确实有用,要在代码的过程中保持住自己定义的区间,是闭还是开?左边和右边的情况分别是怎么样的?要在代码书写中注意这个问题
nums = [[0] * n for _ in range(n)] 这个语法值得学习一下,python中看来还是有很多有意思的操作
这道题的代码实现的细节好多,首先要找到一个循环体,即右下左上为一个循环
然后要定义清楚每一条边是什么,有的边是startx,starty,有的边要n - offset,在编程的时候在纸上画一画,清楚一点
然后就是中间点的处理,上述的循环体是无法触及到n为奇数时的中间点的,需要额外判断。
总而言之是很棒的一道题
区间和
这是一个不在leetcode上面的题
这是一个很有意思的,也很简单的思路,就是额外创建一个数组,来存储0~i的和,之后区间和就可以用做减法的形式来快速得到,方法名字被取名为前缀和
开发商购买土地
也是一种前缀和的用法的扩展,这里面需要注意的是,在横向和纵向上都需要进行一次计算,来寻求最小值