代码随想录系统性一刷总结

devtools/2024/11/14 21:48:49/

代码随想录系统性一刷总结

数组

指针思想很重要

day01 二分查找+移除元素
day02 数组平方+长度最小子数组+螺旋矩阵II

链表

链表结点的增删改查,头结点的运用,灵活运用指针

day03 移除链表元素+设计链表+翻转链表
day04 交换结点+删除结点+链表相交+环形列表

哈希表

灵活使用hashset,几数之和指针再次出马,理解去重和剪枝操作

day06 字符串异位词+数组交集+快乐数+两数之和
day07 赎金信+四数之和+三数之和

字符串

灵活运用指针,熟悉stringBuffer的用法

day08 反转字符串+反转字符串中的单词+右旋字符串+替换数字

KMP算法
day09 KMP

栈与队列

熟悉ArrayList、Stack的用法

day10 队列<<==>>栈
day11 括号匹配+字符串消除重复项+逆波兰表达式
day13 滑动窗口最大值+前K个高频元素

二叉树

熟悉二叉树结点的递归

day14 二叉树的前序、中序、后序遍历
day15 翻转二叉树+对称二叉树+遍历二叉树
day16 最大/最小深度+完全二叉树结点个数
day17 平衡二叉树+二叉树所有路径+左叶子之和
day18 左下角结点+路径总和+中序后序推树
day20 最大二叉树+合并二叉树+搜索二叉搜索树+验证二叉搜索树
day21 二叉搜索树的最小绝对差+众数+最近公共祖先
day22 二叉搜索树插入+删除+最近祖先
day23 修建二叉搜索树+有序数组转换成二叉搜索树+累加树

回溯

主体套回溯模板,重写backtracing函数,具体问题具体分析

java">class Solution {定义类变量res;public List<List<Integer>> 函数名(参数列表) {backtracing(参数列表);return 类变量res;}public void backtracing(参数列表) {if(判断) {res.add(路径);return;}for(遍历i) {path.add(i);backtracing(参数列表);path.removeLast();}}
}
  1. 选择:在当前状态下,尝试所有可能的选择。
  2. 递归:对每一种选择,递归地调用函数进行下一步的选择。
  3. 撤销选择:在递归返回后,撤销当前状态的选择,回到上一步。

day24 组合
day25 组合总和III+电话号码
day27 组合总和+组合总和II+分割回文子串
day28 复原IP+子集I、II
day29 递增子序列+全排列I、II
day30 行程安排+N皇后

贪心

套路是比较大小

  1. 定义贪心选择属性:找到一个局部最优解,通常是在满足某些条件下的最优解。
  2. 做出选择:基于定义的贪心选择属性,做出一个局部最优的选择。
  3. 更新当前问题状态:根据做出的选择,更新当前问题的状态。
  4. 判断是否结束:如果当前问题已经解决,结束;否则,返回步骤2。

day31 发饼干+摆动序列+最大字数组和
day32 股票买卖+跳跃游戏I、II
day34 k次取反后数组最大值+加油站+分发糖果
day35 柠檬水找零+根据身高重建队列+最少数箭引爆气球
day36 无重叠区间+划分字母+合并区间
day37 单调递增的数字+监控二叉树

动态规划

熟悉dp数组的含义

  1. 定义状态:通常需要定义一个或多个状态变量来表示问题的子状态。
  2. 初始化状态:设置初始状态的值,通常这些值是已知的或容易计算的。
  3. 状态转移方程:找到状态之间的转移关系,通常是递推关系,来表示子问题之间的依赖关系。
  4. 计算结果:使用状态转移方程计算出最终的结果。

day38 斐波那契+爬楼梯+最小代价爬楼梯
day39 不同路径I、II
day41 整数拆分+不同的二叉搜索树
day42 背包问题+划分两个子集之和
day43 撞石头+加正负号得到目标和+0和1计数子集
day44 背包2+统计和=target的集合个数
day45 爬楼梯+完全平方数+零钱组合
day46 单词拆分
day48 打家劫舍I、II、III
day49 买卖股票的最佳时机I、II
day50 买卖股票的最佳时机III、IV
day51 买卖股票冷冻期+手续费
day52 最长递增子序列+最长连续递增子序列+最长重复子数组
day53 最长重复字符串(不一定连续)+数组不交叉连线(不一定连续)+最大子序和(连续)
day55 判断是不是子序列+判断子序列个数
day56 删除字符串+编辑距离(字符串增删改
day57 回文子序列个数+最长回文子序列

单调栈

双指针重出江湖,理解如何优化暴力遍历
熟悉用单调递增栈解决时间复杂度的问题

  1. 遍历数组或列表,维护一个单调递增栈。
  2. 对于每个元素,如果当前元素比栈顶元素大,则将栈顶元素出栈,并更新结果。
  3. 如果当前元素比栈顶元素小,则将当前元素入栈。

day58 下一个更高温度+下一个更大元素
day59 下一个最大元素(可循环)+接雨水
day60 柱状图最大矩形面积


下面是本人的一些碎碎念,非战斗人员请立刻撤离!!!

说来惭愧,疫情放开的2023.1我就想,就算每天想一道题,到研二这会我应该可以慢慢刷完。事实上中间断断续续,到二叉树停了好长一段时间(应该是6个月),后面随之而来的科研论文项目,让我晕头转向,更让我清楚地认识到坚持是一件多么困难的事,而坚持一件困难的事,更是反人性的存在。

在9、10月任务少了一些之后,我从二叉树开始重新捡起来,这个重新开始的过程又伴随着痛苦和内耗,特别是小论文发出去之后,多少有点摆烂、及时行乐的心理,又是想起来刷一刷,想不起来就以内耗的名义看小说、追剧、追番。

于是春招实习叫醒了我这个装睡太久的人,眼看着周围一起出发的小伙伴,早就学完了JAVA基础、JAVAWeb、JAVA框架…,他们都在往前奔跑,都在准备下一阶段的项目、简历、八股和面试,我竟然还停留在学到一半的基础,一无所知的框架和刷过的题不一定能写出来,没刷过的题还有很多的力扣算法题这一部分。

我知道于我而言,内驱力是多么可笑的存在,我需要一个集体,一个审判我的集体,一个拉着我向前跑的集体,于是我在过完年之后,将自己封闭了一周,报了代码随想录算法训练营,(其实,我本以为这个训练营是坚持下来的人会退钱的,本着心疼钱坚持下来的Σ( °△°|||)︴)。

这个过程中我又一次感概历史总是不断的重演,因为,在开营两周后,我又一次来到二叉树,我又一次开始觉得没有意义、没意思,觉得我不行、我太菜了、我不适合写代码…内耗到无法起床,每天就是白天睡,晚上躺……还好看着表格里面大家每天都坚持的蓝字,我告诉我自己:”别人可以,我也行!”。

我到现在还记得,这段内心痛苦到只能掐自己、划自己、让自己肉体疼痛的日子,的某一天,我跑遍了学校的自习教室,到了最后一个教室,我坐下,告诉自己:“就在这里,把之前错过的卡补上吧。” 于是那一天,我连刷了7道二叉树,跟上了大部队的脚步。此后一路风雨兼程,再无缺卡。

我本意是想在总结篇写一个所有博客的大跳转,没想到心路历程写成了800字小作文hhh,那就把这部分也留在这里好了,每次回头的时候,看到自己已经走了这么远了,以后也一定一定要坚持走下去~
那,最后再留一段话给未来的自己:

这世间的种种苦难,一如地球上的风浪、阴霾、寒冰雨雪,而我们的意志,便是天上的星辰。苦难能遮挡我们的光芒,蒙蔽我们的感官,让我们黯然失色,但它永远不能真正的毁灭我们。
总有一天,阴云会散去,雨雪会终止,你的光芒会被所有人看到。
你将点亮无趣的夜空,组成浩瀚宇宙的一部分,使其璀璨夺目,持续闪耀。


http://www.ppmy.cn/devtools/6587.html

相关文章

uni-app学习记录

uni-app 基础 uni-app环境搭建 命令行搭建 基础使用差异说明 要使用滚动 <scroll-view scroll-y"true" class"h-600">类似于v-html <rich-text nodes"<h1>1123213</h1>" /> <editor /> - text-area生命周期…

【JavaWeb】Day47.Mybatis基础操作——删除

Mybatis基础操作 需求 准备数据库表 emp 创建一个新的springboot工程&#xff0c;选择引入对应的起步依赖&#xff08;mybatis、mysql驱动、lombok&#xff09; application.properties中引入数据库连接信息 创建对应的实体类 Emp&#xff08;实体类属性采用驼峰命名&#xf…

Python数据可视化库—Bokeh与Altair指南

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在数据科学和数据分析领域&#xff0c;数据可视化是一种强大的工具&#xff0c;可以帮助我们…

​面试经典150题——翻转二叉树

1. 题目描述 2. 题目分析与解析 分析题目可以看出&#xff0c;其实就是从下到上的左右节点互换操作&#xff0c;其实上也是可以进行递归操作的&#xff0c;这是因为每一个子操作和父操作都是一样的方式。 解题思路&#xff1a; 空树情况处理&#xff1a; 首先检查根节点是否…

聊聊linux的文件缓存

序 本文主要研究一下linux的文件缓存 文件缓存 linux使用page cache来缓存最近读取的文件&#xff0c;也有目录结构(dcache: Directory Entry Cache)缓存及inode缓存&#xff0c;它们都使用了LRU算法来管理这些page及dentries cache vmstat ## vmstat procs -----------me…

【数据结构2-线性表】

数据结构2-线性表 1 线性表-数组2 线性表-单链式结构2.1 前插顺序单链表2.2 后插顺序单链表2.3 循环单链表2.4 双向链表 总结 线性表、栈、队列、串和数组都属于线性结构。 线性结构的基本特点是除第一个元素无直接前驱&#xff0c;最后一个元素无直接后继之外&#xff0c;其他…

【C++】日期类Date(详解)

&#x1f525;个人主页&#xff1a;Forcible Bug Maker &#x1f525;专栏&#xff1a;C 目录 前言 日期类 日期类实现地图 获取某年某月的天数&#xff1a;GetMonthDay 检查日期合法&#xff0c;构造函数&#xff0c;拷贝构造函数&#xff0c;赋值运算符重载及析构函数…

【运维】docker-compose部署redis

部署Redis使用docker-compose是一种简便且流行的方式。以下是基本的docker-compose.yml文件示例&#xff0c;用于部署单节点Redis服务 方案一 直接使用docker安装单机版 创建.env环境文件并配置管理密码 echo REDIS_PWDredis123456 > .env创建docker-compose.yml环境文件…