算法通关面试40讲

  • 如何学好数据结构?
    • 精通一个领域
      • 切碎知识点
      • 刻意练习:
        • 练习缺陷,弱点地方(练字)----不爽,枯燥,不舒服的地方----坚持,心里没底的  
      • 反馈    
        • 主动反馈:看看高手怎么写代码的(自己去找)
        • 被动反馈:高手教你(别人教你)
  • 时间复杂度和空间复杂度
    • 斐波拉契数量o(2^n)----用递归很明显不是最好的
    • 主定律:二分查找。二叉树变量,排序,快排
  • LeetCode
    • 寻求反馈
  • 数组
    • 连续的存储区域  
    • 插入,删除O(n),查询O(1)
  • 链表--改善数组的插入和删除的时间复杂度
    • 插入和删除O(1),查询O(n)
    • 双链表
    • 面试题:反转链表
    • 面试题:两两反转
    • 面试题:判断是否有环
      • 2个指针,1个一次走一步,1个一次走两步,相遇就有环---龟兔赛跑法
      • set 判重复   
  • 栈--先入后出
    •   
    • 插入和删除O(1),查找O(n)
    • 面试题:给定一个只包含大中小括号的字符串,判断括号是否合法
      • a.左括号---push
      • b.右括号---peek栈顶--pop元素
      • c.堆栈必须是空的  
      • 时间O(n),空间O(n)
    • 面试题:只用栈实现队列
      • 输入栈:push
      • 输出栈:pop,peek  
      • 倒腾顺序 
    • 面试题:只用队列实现栈
      • 与上面相反,也是两个队列倒腾顺序        
  • 队列---先入先出 
    • 插入和删除O(1),查找O(n)
    • 优先队列
      • 堆实现
        • 二叉最小堆  
        • 面试题:实时判断数据流中第K大的元素
          • 1.保存K个最大值
          • 优先队列--小顶堆保存K个数据,比他小就弃了,比他大就加入堆弃掉它
        • 面试题:滑动窗口最大值
          • 优先队列--大顶堆--维护堆,结果是堆顶元素
          • 双端队列---最左边的最大,左边比他小的全部删除,右边比他小的保留  
      • 二叉搜索树实现  
  • 映射map
  • 集合set    

猜你喜欢

转载自www.cnblogs.com/shuimohei/p/13208368.html