day02 209.长度最小的子数组 59.螺旋矩阵II以及数组总结

滑动窗口  双指针的一种实现(时间复杂度为o(n))

滑动窗口 j指向终止位置  如果指向起始位置就和暴力解法一样,故而重点就在于怎么移动起始位置

对于209:滑动窗口的原理是右边先开始走,然后直到窗口内值的总和大于target,此时就开始缩圈,缩圈是为了找到最小值,只要此时总和还大于target,我就一直缩小,缩小到小于target为止在这过程中不断更新最小的长度值,然后右边继续走,如此反复,直到右边碰到边界。这样就保证了可以考虑到最小的情况

考虑三方面:窗口内是什么  如何确定起始位置  如何确定终止位置

是while而不是if   可以一直使left迭代得到最小的子数组  

904 水果成篮与209.长度最小的子数组不同的是水果成篮要求在满足条件的情况下收集水果的最大数目。

翻译成计算机语言也就是,209题求解的是满足条件的子数组最小长度,904题求解的是满足条件的子数组最大长度。
同理利用滑动窗口的知识翻译就是,209求解最小滑窗是在迭代右移左边界的过程中更新结果,904题目求解最大滑窗是在迭代右移右边界的过程中更新结果。

螺旋矩阵 与二分法类似  重点在于循环不变量(左闭右闭 左闭右开)

左闭右开(时间复杂度o(n2)遍历的是二维数组)

模拟顺时针画矩阵的过程:

  • 填充上行从左到右
  • 填充右列从上到下
  • 填充下行从右到左
  • 填充左列从下到上

循环圈数判断  n/2为循环的圈数,n奇偶数要做不同的判断

螺旋矩阵大致分为两种  一种为填充螺旋矩阵  一种为以螺旋矩阵中读出数据 都要对奇偶数做特殊处理如果填充螺旋矩阵则为奇数时最中间的数需要特殊处理,如果从螺旋矩阵中读数据时要注意行数与列数不一致的情况,循环圈数为行数与列数的最小值,最后处理多出来的行与列,如果行数大于列数则多出来列,如果列数大于行数则多出来行。

数组终结:

1.二分法   二分法时间复杂度:O(logn)   循环不变量原则

2.双指针法 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作   双指针时间复杂度:O(n)

3.滑动窗口:滑动窗口时间复杂度:O(n)   滑动窗口的精妙之处在于根据当前子序列和大小的情况,不断调节子序列的起始位置。从而将O(n^2)的暴力解法降为O(n)。

4.模拟行为:循环不变量原则

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值