209.长度最小的子数组
状态:没写出来 ->确认自己的想法是对的之后写出来了!!!
初始思路:因为子数组是连续的,所以可以采用滑动窗口,我把这个窗口设置为左闭右闭,所以初始左右边界为0。之后先移动右指针,使得找到第一个和大于等于target的子数组,记录其长度,之后再移动左指针一位,再找第二个......以此类推。
看完题目分析之后:我的思路是对的,就是代码没写出来,再去试试。
存在问题:
1.首先就是思维混乱,不知道怎么处理只有一个元素的指针移动问题:最后我自己的解决办法是在移动左指针之后,判断一下是不是大于了右指针,如果大于了右指针就代表上一次只有一个元素,所以特殊处理也移动右指针。
2.然后还有问题就是我不知道在循环中应该怎么处理移动左指针之后,先不移动右指针,先判断当前区间内的是否符合要求。为什么很难呢,因为每一次判断完当前情况之后,对于更新total有两种选择:第一种需要移动指针,然后for判断条件,然后total加新的数;第二种就是移动指针,然后加total加新的数,然后for判断条件;因为有可能移动指针之后发生越界,所以我必须选择第一种方式,所以导致我会重复加一次右指针数:最后我自己的解决办法是移动左指针之后,就把total减去左右指针的数,然后不移动右指针,之后再判断条件,再把右指针的数加回来。
3.最后就是我认为不同的情况对于左右指针的移动很不一样,有时候需要只移动左指针,有时候需要移动右指针,有时候需要移动左指针和右指针,我不知道该怎么写这个for循环:最后我不在for中更新左右指针,而是在不同情况下进行不一样的更新。我认为这一点很重要。
看完视频讲解的代码之后,我发现关于123点,完全不需要这么麻烦,只要在判断total>=target的时候用while,一切就迎刃而解,也就可以在for中更新右指针了。
59.螺旋矩阵II
状态:之前刷题的时候做过这道题,但是当时似懂非懂,于是直接看视频讲解。
初始思路:我知道大概思路是定义从左到右、从上到下,从右到左,从下到上四个,然后不知道了。
看完视频之后:首先,确定整体思路:一圈一圈填充,采用左闭右开,那么所需要解决的问题就是填充的元素xy坐标是什么。为了解决这个问题,首先明确需要多少圈,然后引入startx,starty来确定每一圈开始的位置,offset非常巧妙,用来定义偏移。然后也很特别的一点是ij只需要在每圈最开始的时候用startxy赋值,我认为这样非常清晰。之后就是需要明确在过程中ij一直移动,不需要考虑重新赋值。还有很重要的一点是,从下往上和从右往左都是和边界比较,而不是偏移量。
然后记住这个:
matrix = [[0 for _ in range(n)] for _ in range(n)]
vector<vector<int>> matrix(n, vector<int>(n, 0));
拓展题目:卡码网 | 58. 区间和(第九期模拟笔试)44. 开发商购买土地(第五期模拟笔试)
58.区间和
用到前缀和,挺重要的概念,acm模式很顶。
44. 开发商购买土地
未完成
标签:total,59,209,之后,然后,II,需要,移动,指针 From: https://blog.csdn.net/xiaotaoooo/article/details/142560732