算法训练营第二天| 209.长度最小的子数组、59.螺旋矩阵II

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. 开发商购买土地

未完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值