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

2024-04-22 05:20

本文主要是介绍代码随想录系统性一刷总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

数组

指针思想很重要

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函数,具体问题具体分析

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.chinasem.cn/article/924906

相关文章

Python版本与package版本兼容性检查方法总结

《Python版本与package版本兼容性检查方法总结》:本文主要介绍Python版本与package版本兼容性检查方法的相关资料,文中提供四种检查方法,分别是pip查询、conda管理、PyP... 目录引言为什么会出现兼容性问题方法一:用 pip 官方命令查询可用版本方法二:conda 管理包环境方法

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

Java集合之Iterator迭代器实现代码解析

《Java集合之Iterator迭代器实现代码解析》迭代器Iterator是Java集合框架中的一个核心接口,位于java.util包下,它定义了一种标准的元素访问机制,为各种集合类型提供了一种统一的... 目录一、什么是Iterator二、Iterator的核心方法三、基本使用示例四、Iterator的工

Java 线程池+分布式实现代码

《Java线程池+分布式实现代码》在Java开发中,池通过预先创建并管理一定数量的资源,避免频繁创建和销毁资源带来的性能开销,从而提高系统效率,:本文主要介绍Java线程池+分布式实现代码,需要... 目录1. 线程池1.1 自定义线程池实现1.1.1 线程池核心1.1.2 代码示例1.2 总结流程2. J

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②

Vue实现路由守卫的示例代码

《Vue实现路由守卫的示例代码》Vue路由守卫是控制页面导航的钩子函数,主要用于鉴权、数据预加载等场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、概念二、类型三、实战一、概念路由守卫(Navigation Guards)本质上就是 在路

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

JAVA实现Token自动续期机制的示例代码

《JAVA实现Token自动续期机制的示例代码》本文主要介绍了JAVA实现Token自动续期机制的示例代码,通过动态调整会话生命周期平衡安全性与用户体验,解决固定有效期Token带来的风险与不便,感兴... 目录1. 固定有效期Token的内在局限性2. 自动续期机制:兼顾安全与体验的解决方案3. 总结PS

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

Python屏幕抓取和录制的详细代码示例

《Python屏幕抓取和录制的详细代码示例》随着现代计算机性能的提高和网络速度的加快,越来越多的用户需要对他们的屏幕进行录制,:本文主要介绍Python屏幕抓取和录制的相关资料,需要的朋友可以参考... 目录一、常用 python 屏幕抓取库二、pyautogui 截屏示例三、mss 高性能截图四、Pill