代码随想录一刷总结

为期60天的代码随想录算法训练营结束了,中间想放弃过,敷衍过,但是最终还是完成了,给我自己和打满60天卡的小伙伴们一个赞。这60天的从一个算法小白到刚刚入门,虽然只是小小一步,却并不容易,至少我现在看到题目会思考用什么办法解决了,有时候还会想到好几种办法,我的进步是肉眼可见的,也感谢代码随想录,感谢卡尔哥,这网站太好了!代码随想录,大家走过路过不要错过。下面是我的总结

目录

数组类题目

链表类题目

哈希表类题目 

字符串类题目 

栈与队列

二叉树类题目 

回溯算法 

贪心算法 

动态规划 


数组类题目

二分查找:查找一个元素,操作3个指针

  • 前提:有序且无重复元素

移除元素:快慢指针,快指针找不含目标元素的数组,慢指针更新数组下标位置

滑动窗口:不断调节子序列的起始位置和终止位置,从而得到结果

对于数组类题目,要想到双指针法,但是要思考指针的位置,记得二分查找要排序

链表类题目

链表的题目一般比较难想,画图可以帮助我理清思路,对于链表的修改(插入、删除、移动),都加一个虚拟头节点

哈希表类题目 

对于Java来说,哈希表主要有HashMap 和HashSet 和数组

当我们遇到了要快速判断一个元素是否出现在集合里时,就用哈希法

数组:大小有限,数据不能太分散

  • 可解决的题目类型:242.有效的字母异位词

mapkey是唯一的且是无序的

  • 可解决的题目类型:1. 两数之和

set:

  • 可解决的题目类型:349. 两个数组的交集

字符串类题目 

字符串类题目可以参考数组类题目,一般也是双指针法

字符串类题目还有KMP算法,可以看一下我这篇博客KMP算法总结

栈与队列

栈:先进后出         队列:先进后出

要记住栈与队列的常用API,括号匹配就是用栈道一道经典题目

还有单调栈,单调队列,多多练习才能熟练操作栈与队列

二叉树类题目 

二叉树多用递归来解题,这就不得不记住递归三部曲:

  1. 确定递归函数的参数和返回值
  2. 确定结束条件
  3. 单层递归逻辑

要掌握二叉树的前中后序遍历和层序遍历的递归法和迭代法,可以看一下我这篇博客二叉树的遍历

递归的本质就是栈,二叉树的迭代法大多数都是用栈实现的

回溯算法 

我觉得回溯算法很难,都是照着题解抄,多亏了卡哥总结的回溯算法的模板,只要照着模板,简单的都能自己写出来:

void trabacking(){
    if(终止条件){
        存放结果;
        return;
    }
    for(遍历){
        处理节点;
        trabacking();
        撤销;
    }
}

回溯法能解决的问题:

  1. 组合问题
  2. 排列问题
  3. 分割问题
  4. 子集问题
  5. 棋盘问题

贪心算法 

贪心的本质就是局部最优-->全局最优,不用关心上一个状态

这是一种思想

动态规划 

动态规划中的每一个状态是由上一个状态推导出来的

动规五部曲

  1. 确定dp数组的下标及其含义
  2. 确定递推公式 
  3. dp数组的初始化
  4. 确定遍历顺序
  5. 举例推导dp数组

你可能感兴趣的:(算法,数据结构)