Skip to content

Latest commit

 

History

History
 
 

README.md

第一周小结

学习算法的战略层 - 刻意学习

  • 切碎知识点 (每一道题目都考了什么知识点,从题解中学到了什么骚操作,语言的精妙处理)
  • 刻意联系(对于每学到的一种操作,对于同类型不同的题型差异在哪里,手撸的过程进一步总结,到最后要做到每碰到一道题能够在脑子中快速模拟多种不同的解法)
  • 反馈(从自己的反馈,助教,老师的反馈)

学习算法的战术层

切题四件套:

  • 理解题目(是否排序,边界条件)
  • 所有可能的解法 (注意是否刻意不 over-do, 以减少时间/空间复杂度)
    • 对比时间空间复杂度
    • optimal
  • 多写
  • 尝试自己写 test case

五毒神掌

  • 第一遍

    • 10 分钟读题思考
    • 没有思路,直接题解
    • 悲伤默写解法
  • 第二遍

    • 自己写并且体会
  • 第三遍

    • 过一天重复做题
    • 对不同解法进行专项练习
  • 第四遍

    • 过一周重复练题
  • 第五遍

    • 面试前恢复训练

    第一周内容回顾:

    • 数组

      • append O(1)
      • lookup O(1)
      • ** insert O(n)
      • ** delete O(n)
    • 链表

      • insert O(1)
      • delete O(1)
      • lookup O(n)
      • append O(1)
    • 调表

      • 所有的操作都是 O(logn)的操作,综合表现最好,需要进一步了解其应用/实现方式

      解题记录

      上课题解

      题号 名称 Github 链接 解题心得 已经刷遍数 难度
      283 移动 0 快慢指针,判断慢指针指向的对象,什么时候该走,什么时候不该走 2 简单
      70 爬楼梯 典型的斐波那切数列问题,三个变量,f1, f0, fn 用来计算每一步的步数,因为根据 f_n = f_n-1 + f_n-2 2
      11 盛水最多的容器 双指针问题,需要大概理解为什么移动小的柱子(因为移动大的柱子并不会让盛的水变得更大)。注意移动指针问题 if else 或者 if continue 的使用 1 中等
      15 三数之和 注意指针的移动方向,什么时候一个一个移动,什么时候一起移动。也要注意审题。就是题目中的重复的三元组,如果有重复元素的处理方法。 1 中等
      24 两两交换链表节点 1 中等

      周作业题解

      题号 名称 Github 链接 解题心得 已经刷遍数 难度
      26 删除排序数组重复项 快慢指针,判断慢指针指向的对象,什么时候该走,什么时候不该走 2 简单
      189 翻转数组 偏逻辑观察问题,如果额外空间,用 python 可以达到常数级时间复杂度。但是不符合题目要求。 可以通过三次翻转数组,时间复杂度为 O(n),空间复杂度为 O(1) 2
      1 两数之和 使用哈希表或者排序使用双指针 2 简单
      66 加 1 无特别算法,正常指针运算 2 简单
      21 合并有序链表 第一次接触链表操作不太熟悉。 注意!链表的链接只能通过 node.next 进行 assign。 而 =号的操作把某个 node 赋值给变量,和其他 node 之间的联系并没有打破或者建立 1 简单
      88 合并有序数组 注意审题,已经对于 python 或者其他语言在内存中位置的判断。重新学习题解中的浅拷贝用法 1 简单
      21 接雨水 这道题难的是在思维方式,目前的知识只用到了双指针,需要把本周的双指针重新复习一下常见的操作方式,包括快慢指针。例如,为什么右边最高的墙比左边最高的墙高,就可以继续移动右边的指针,实时计算容积。 1