这道题其实也是双指针的思想,slow和fast指针共同构成一个滑块
累加滑块的值判断滑块内的值是否大于Target的值
slow 和 fast指针分别只有一个作用
slow指针只有当滑块中的值大于Target值时候才会移动
通过移动slow指针并减去slow指针的值 减少整个滑块的值
fast指针只有当滑块内的值小于Target值时才会继续移动
通过移动Fast指针并增加slow指针的值 增加整个滑块的值
当Fast指针走到低后 滑块覆盖的范围就是最小的子数组
这道题第一点是要搞清楚n和圈数之间的关系 这样才能方便后续的遍历
需要注意的点是每个方向一定要按照同样的方法去走 比如都是左闭右开
在左闭右开的情况下路程就是1->2 3 -> 4 ...
对比左开右闭,情况就少很多,左开右闭 会出现越界或者从8->1需要特别讨论等等情况
我也不知道为什么要去试一试这种情况怎么写,可能是思想出了问题
如果完全不做优化 就长下面这样 强行把题做复杂了
这道题起始就是把每个的看成了长度不同的块
暴力循环就是当作两个不同的点
如果遇到大小范围内信息是包含关系是 应该都可以优先考虑这个做法
44. 开发商购买土地 题目链接 (opens new window)
这道题就是在区间和的基础上进行,把一个二维数组换成多个块,分别记录数据并且比较
需要注意的是 以行为例
实际上就是剩余部分的值Value就是sum - horizontalCut
那么abs括号中的部分就是剩余值和当前块的值的差距
行为例子的块H中包括了h1 h2 h3三个小的块
无论这三个小的块如何运算都是H中的一部分 符合区间和中大小范围信息包含关系
对于数组这部分进行总结,虽然数组本身比较简单,但是需要注意的东西还是很多,还是得把边界值等问题梳理清楚再动手,不然都不知道自己再写什么鬼东西