Day5 本周心得和总结

数组

关于数组,本身结构上比较简单,所以题型上要思考的较多,思想上大多为算法单调性和不变性思想策略,模拟等

  • 算法单调性和不变性思想策略,即将一个未知区间的数组亦步亦趋的转化为某些区间已知,某些区间未知的中间状态,最终转化为全部区间已知。(如二分查找的两种不同返回值情况)。
  • 双指针法 序数组的平方使用了双指针法,但是思想上也是算法单调性和不变性思想,即减少了未知数组的长度,增加了需求数组的长度,最终达到完整的输出数组。
  • 滑动窗口法 长度最小的子数组使用了滑动窗口法,确定每个合法的后指针为结尾的子数组长度,然后缩减前指针,找到以当前节点为结尾的最小的子数组,逻辑上来说肯定也是用算法单调性和不变性思想策略,即确定的以当前指针结尾的最小子数组的长度越来越多,最终达到全部已知,找到最小的即可。
  • 螺旋矩阵II采用了模拟的思路,即亦步亦趋地根据题意,模拟整个遍历过程,逻辑上来说肯定也是用算法单调性和不变性思想策略,但是这种比较直观,所以就归为了模拟法。需要注意边界条件。

链表

关于链表,同样有两种题型,模拟和双指针

  • 一种是简单模拟类型的题,这种题就是按照题目描述去操作即可,思考上主要在于单次循环需要修改的指针域和顺序,注意由于之前的修改需要提前保存的变量以及循环条件即可。
  • 另一种是双指针类的题。实际上第二种也算是模拟类型,只是不像第一种题那么直观,不能根据题目描述直接得到需要遍历和单次遍历需要操作的节点,一般是通过快慢指针得到需要修改的节点后,再去做修改。比如链表相交和环形链表。
    另外,关于链表,还需要注意虚拟头节点技术,一般增删改需要用来这个dummyHead来统一头节点和其他普通节点的操作,对于查找,则一般不需要使用。

总结

总的来说,在这一周的学习中,主要用了算法的不变性和单调性问题思想去解决问题,因为模拟实际也是使用了算法的不变性和单调性,但是因为题目比较直观,所以单独分出来,对于这类题,主要注意的是边界条件。而一般解决问题的思路就是增加已知,减少未知,直到达到需要。

勘误

之前认为解决问题的思路都是用了减治,实际是不对的,根据减治和分治的思想如下:

  • 所谓减而治之,是为求解一个大规模的问题,可以将其划分为两个子问题:其一平凡,另一个规模缩减,分别求解子问题,由子问题的解,得到原问题的解。
  • 所谓分而治之,是为求解一个大规模问题,可以将其划分为若干(通常两个)子问题,规模大体相当,分别求解子问题,由子问题的解,得到原问题的解

根据两种思想的定义,得知都是将原问题分解为子问题,所以一般使用递归处理,而我们上面的题目是实际使用了解决问题的基本思路,即就是利用算法的不变性和单调性,增加已知,减少未知。这种思想是大多数解决问题的核心思路,不管是迭代还是递归实际都是用到了这种方法。

posted @   haohaoscnblogs  阅读(9)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示