- 博客(33)
- 收藏
- 关注
原创 代码随想录刷题day35丨 01背包问题 二维 ,01背包问题 一维 ,416. 分割等和子集
对于面试的话,其实掌握01背包和完全背包,就够用了,最多可以再来一个多重背包。如果这几种背包,分不清,我这里画了一个图,如下:完全背包又是也是01背包稍作变化而来,即:完全背包的物品数量是无限的。!01 背包。
2024-09-17 17:21:34
1220
原创 代码随想录刷题day34丨 62.不同路径 ,63. 不同路径 II
文档讲解:https://programmercarl.com/0062.%E4%B8%8D%E5%90%8C%E8%B7%AF%E5%BE%84.html解题思路:动态规划确定dp数组(dp table)以及下标的含义确定递推公式dp数组的初始化确定遍历顺序举例推导dp数组。
2024-09-16 21:22:37
1166
原创 代码随想录刷题day32丨动态规划理论基础,509. 斐波那契数, 70. 爬楼梯, 746. 使用最小花费爬楼梯
然后再写代码,如果代码没通过就打印dp数组,看看是不是和自己预先推导的哪里不一样。如果打印出来和自己预先模拟推导是一样的,那么就是自己的递归公式、初始化或者遍历顺序有问题了。如果和自己预先模拟推导的不一样,那么就是代码实现细节有问题。
2024-09-14 15:00:18
1686
原创 代码随想录刷题day31丨56. 合并区间,738.单调递增的数字,总结
贪心的本质是选择每一阶段的局部最优,从而达到全局最优。贪心没套路,就刷题而言,如果感觉好像局部最优可以推出全局最优,然后想不到反例,那就试一试贪心吧!for循环适合模拟从头到尾的遍历,而while循环适合模拟环形遍历。
2024-09-13 12:42:04
765
原创 代码随想录刷题day30丨452. 用最少数量的箭引爆气球, 435. 无重叠区间,763.划分字母区间
文档讲解:https://programmercarl.com/0452.%E7%94%A8%E6%9C%80%E5%B0%91%E6%95%B0%E9%87%8F%E7%9A%84%E7%AE%AD%E5%BC%95%E7%88%86%E6%B0%94%E7%90%83.html解题思路:贪心。。两个气球挨在一起不重叠也可以一起射爆以题目示例: [[10,16],[2,8],[1,6],[7,12]]为例,如图:(方便起见,已经排序)
2024-09-12 21:02:33
755
原创 代码随想录刷题day29丨134. 加油站,135. 分发糖果,860.柠檬水找零 , 406.根据身高重建队列
文档讲解:https://programmercarl.com/0134.%E5%8A%A0%E6%B2%B9%E7%AB%99.html解题思路:贪心首先如果总油量减去总消耗大于等于零那么一定可以跑完一圈,说明 各个站点的加油站 剩油量rest[i]相加一定是大于等于零的。每个加油站的剩余量rest[i]为gas[i] - cost[i]。
2024-09-12 17:16:04
1270
原创 代码随想录刷题day28丨122.买卖股票的最佳时机II, 55. 跳跃游戏, 45.跳跃游戏II, 1005.K次取反后最大化的数组和
文档讲解:https://programmercarl.com/0122.%E4%B9%B0%E5%8D%96%E8%82%A1%E7%A5%A8%E7%9A%84%E6%9C%80%E4%BD%B3%E6%97%B6%E6%9C%BAII.html解题思路:贪心如何分解呢?假如第 0 天买入,第 3 天卖出,那么利润为:prices[3] - prices[0]。
2024-09-10 12:07:39
698
原创 代码随想录刷题day27丨455.分发饼干 ,376. 摆动序列 ,53. 最大子序和
这么说有点抽象,来举一个例子:例如,有一堆钞票,你可以拿走十张,如果想达到最大的金额,你要怎么拿?指定每次拿最大的,最终结果就是拿走最大数额的钱。每次拿最大的就是局部最优,最后拿走最大数额的钱就是推出全局最优。再举一个例子如果是 有一堆盒子,你有一个背包体积为n,如何把背包尽可能装满,如果还每次选最大的盒子,就不行了。这时候就需要动态规划。。难点就是如何通过局部最优,推出整体最优。靠自己手动模拟,如果模拟可行,就可以试一试贪心策略,如果不可行,可能需要动态规划。如何验证可不可以用贪心算法呢。
2024-09-09 14:39:29
927
原创 代码随想录刷题day25丨491.递增子序列 ,46.全排列 ,47.全排列 II
题目链接:491. 非递减子序列 - 力扣(LeetCode)视频讲解:回溯算法精讲,树层去重与树枝去重 | LeetCode:491.递增子序列_哔哩哔哩_bilibili文档讲解:https://programmercarl.com/0491.%E9%80%92%E5%A2%9E%E5%AD%90%E5%BA%8F%E5%88%97.html解题思路:回溯用[4, 7, 6, 7]这个数组来举例,抽象为树形结构如图:代码:总结:题目链接:46. 全排列 - 力扣(LeetCode)视频讲解:组合与
2024-09-07 18:53:36
800
原创 代码随想录刷题day24丨93.复原IP地址 ,78.子集 , 90.子集II
文档讲解:https://programmercarl.com/0093.%E5%A4%8D%E5%8E%9FIP%E5%9C%B0%E5%9D%80.html解题思路:回溯只要意识到这是切割问题,切割问题可以抽象为树型结构,如图:回溯三部曲递归函数参数startIndex一定是需要的,因为不能重复分割,记录下一层递归分割的起始位置。需要一个变量pointNum,记录添加逗点的数量。递归终止条件本题明确要求只会分成4段,所以不能用切割线切到最后作为终止条件,而是分割的段数作为终止条件。
2024-09-07 13:53:30
843
原创 代码随想录刷题day23丨39. 组合总和,40.组合总和II, 131.分割回文串
文档讲解:https://programmercarl.com/0039.%E7%BB%84%E5%90%88%E6%80%BB%E5%92%8C.html解题思路:回溯本题搜索的过程抽象成树形结构如下:注意图中叶子节点的返回条件,因为本题没有组合数量要求,仅仅是总和的限制,所以递归没有层数的限制,只要选取的元素总和超过target,就返回!回溯三部曲递归函数参数递归终止条件单层搜索的逻辑剪枝优化。
2024-09-05 16:40:37
833
原创 代码随想录刷题day22丨回溯理论基础,77. 组合,216.组合总和III,17.电话号码的字母组合
从下图中红线部分可以看出,在集合[1,2,3,4]取1之后,下一层递归,就要在[2,3,4]中取数了,那么下一层递归如何知道从[2,3,4]中取数呢,靠的就是startIndex。第一次取1,集合变为2,3,4 ,因为k为2,我们只需要再取一个数就可以了,分别取2,3,4,得到集合[1,2] [1,3] [1,4],以此类推。例如 k = 2,n = 4的话,就是在集合[1,2,3,4,5,6,7,8,9]中求 k(个数) = 2, n(和) = 4的组合。
2024-09-04 21:04:27
713
原创 代码随想录刷题day21丨669. 修剪二叉搜索树,108.将有序数组转换为二叉搜索树,538.把二叉搜索树转换为累加树,二叉树总结
看到递归,就去想:返回值、参数是什么?终止条件是什么?单层逻辑是什么?递归与迭代究竟谁优谁劣呢?从时间复杂度上其实迭代法和递归法差不多(在不考虑函数调用开销和函数调用产生的堆栈开销),但是空间复杂度上,递归开销会大一些,因为递归需要系统堆栈存参数返回值等等。递归更容易让程序员理解,但收敛不好,容易栈溢出。这么说吧,递归是方便了程序员,难为了机器(各种保存参数,各种进栈出栈)。在实际项目开发的过程中我们是要尽量避免递归!因为项目代码参数、调用关系都比较复杂,不容易控制递归深度,甚至会栈溢出。
2024-09-03 22:49:04
1000
原创 代码随想录刷题day20丨235. 二叉搜索树的最近公共祖先,701.二叉搜索树中的插入操作,450.删除二叉搜索树中的节点
文档讲解:https://programmercarl.com/0235.%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E7%9A%84%E6%9C%80%E8%BF%91%E5%85%AC%E5%85%B1%E7%A5%96%E5%85%88.html解题思路:递归法或者迭代法。
2024-09-02 17:13:26
1060
原创 代码随想录刷题day18丨530.二叉搜索树的最小绝对差,501.二叉搜索树中的众数 ,236. 二叉树的最近公共祖先
文档讲解:https://programmercarl.com/0530.%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E7%9A%84%E6%9C%80%E5%B0%8F%E7%BB%9D%E5%AF%B9%E5%B7%AE.html解题思路:递归(中序遍历)+ 双指针思想。
2024-08-31 20:49:05
896
原创 代码随想录刷题day17丨654.最大二叉树,617.合并二叉树,700.二叉搜索树中的搜索,98.验证二叉搜索树
文档讲解:https://programmercarl.com/0654.%E6%9C%80%E5%A4%A7%E4%BA%8C%E5%8F%89%E6%A0%91.html解题思路:递归(前序遍历)
2024-08-30 22:17:48
975
原创 代码随想录刷题day16丨513.找树左下角的值,112. 路径总和,113.路径总和II,106.从中序与后序遍历序列构造二叉树,105.从前序与中序遍历序列构造二叉树
文档讲解:https://programmercarl.com/0513.%E6%89%BE%E6%A0%91%E5%B7%A6%E4%B8%8B%E8%A7%92%E7%9A%84%E5%80%BC.html解题思路:递归(前中后序都可以)
2024-08-29 20:06:03
706
原创 代码随想录刷题day15丨110.平衡二叉树,257. 二叉树的所有路径, 404.左叶子之和 ,222.完全二叉树的节点个数
文档讲解:https://programmercarl.com/0110.%E5%B9%B3%E8%A1%A1%E4%BA%8C%E5%8F%89%E6%A0%91.html解题思路:递归(后序遍历)总结:求高度用后序遍历,求深度用前序遍历。
2024-08-28 23:33:22
694
原创 代码随想录刷题day14丨226.翻转二叉树,101. 对称二叉树,104.二叉树的最大深度,**111.二叉树的最小深度**
文档讲解:https://programmercarl.com/0104.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E6%9C%80%E5%A4%A7%E6%B7%B1%E5%BA%A6.html。文档讲解:https://programmercarl.com/0111.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E6%9C%80%E5%B0%8F%E6%B7%B1%E5%BA%A6.html。解题思路:递归(后序遍历)
2024-08-27 15:48:53
802
原创 代码随想录刷题day13丨二叉树理论基础,递归遍历,迭代遍历,统一迭代,层序遍历
顺序存储就是用数组来存,没啥好说的二叉树的定义 和链表是差不多的,相对于链表 ,二叉树的节点里多了一个指针, 有两个指针,指向左右孩子。在现场面试的时候 面试官可能要求手写代码,所以数据结构的定义以及简单逻辑的代码一定要锻炼白纸写出来。因为我们在刷leetcode的时候,节点的定义默认都定义好了,真到面试的时候,需要自己写节点定义的时候,有时候会一脸懵逼!代码int val;: 这是一个默认构造函数,它不带有任何参数。当你想创建一个没有任何初始值的节点时使用它。
2024-08-27 12:09:58
1264
原创 代码随想录刷题day11丨150. 逆波兰表达式求值,239. 滑动窗口最大值 ,347.前 K 个高频元素,栈与队列总结
栈栈顶(Top):线性表允许进行插入删除的那一端。栈底(Bottom):固定的,不允许进行插入和删除的另一端。方法功能Stack()构造一个空的栈将e入栈,并返回eE pop()将栈顶元素出栈并返回E peek()获取栈顶元素int size()获取栈中有效元素个数检测栈是否为空// 压栈操作 stack . push("Java");// 弹栈操作 String topLanguage = stack . pop();
2024-08-24 19:23:12
916
原创 代码随想录刷题day10丨栈与队列理论基础,232.用栈实现队列,**225. 用队列实现栈** , 20. 有效的括号, 1047. 删除字符串中的所有相邻重复项
文档讲解:https://programmercarl.com/1047.%E5%88%A0%E9%99%A4%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%E7%9A%84%E6%89%80%E6%9C%89%E7%9B%B8%E9%82%BB%E9%87%8D%E5%A4%8D%E9%A1%B9.html。第二种:遍历遇到左括号就在栈里面放右括号,遇到右括号判断下右括号的类型和栈里面的右括号类型匹配不匹配。第一种:遍历遇到左括号就在栈里面放右括号,遇到右括号就出栈一个右括号。
2024-08-23 20:40:18
887
原创 代码随想录刷题day9丨151.翻转字符串里的单词,卡码网:55.右旋转字符串,28. 实现 strStr(), 459.重复的子字符串,字符串总结,双指针回顾
字符串是若干字符组成的有限序列,也可以理解为是一个字符数组很多数组填充类的问题,都可以先预先给数组扩容带填充后的大小,然后在从后向前进行操作针对数组删除操作的问题,使用双指针法进行移除操作当需要固定规律一段一段去处理字符串的时候,要想想在在for循环的表达式上做做文章先整体反转再局部反转,实现了反转字符串里的单词先局部反转再整体反转可以达到左旋的效果"左旋"通常指的是将数组中的元素依次向左移动一个或多个位置,将移出的元素重新放到数组的末尾。KMP的主要思想是。
2024-08-22 19:18:50
1045
原创 代码随想录刷题day8丨344.反转字符串,541. 反转字符串II,卡码网:54.替换数字
文档讲解:https://programmercarl.com/0344.%E5%8F%8D%E8%BD%AC%E5%AD%97%E7%AC%A6%E4%B8%B2.html解题思路:双指针法。
2024-08-21 19:13:15
844
原创 代码随想录刷题day7丨454.四数相加II , 383. 赎金信 , 15. 三数之和 ,18. 四数之和 ,总结
哈希表总结一般来说哈希表都是用来快速判断一个元素是否出现集合里。哈希函数和哈希碰撞在哈希表中的作用哈希函数是把传入的key映射到符号表的索引上哈希碰撞处理有多个key映射到相同索引上时的情景,处理碰撞的普遍方式是拉链法和线性探测法。三种哈希结构数组set(集合)map(映射)数组的大小是受限制的set是一个集合,里面放的元素只能是一个keymap是一种的结构。
2024-08-20 17:44:20
790
原创 代码随想录刷题day6丨哈希表理论基础 ,242.有效的字母异位词,349. 两个数组的交集,202. 快乐数, 1. 两数之和
当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。哈希法也是牺牲了空间换取了时间,因为我们要使用额外的数组,set或者是map来存放数据,才能实现快速的查找。
2024-08-19 18:48:57
972
原创 代码随想录刷题day4丨24. 两两交换链表中的节点,19.删除链表的倒数第N个节点 ,面试题 02.07. 链表相交 ,142.环形链表II ,链表总结
链表的一大问题就是操作当前节点必须要找前一个节点才能操作。这就造成了,头结点的尴尬,因为头结点没有前一个节点了。每次对应头结点的情况都要单独处理,所以使用虚拟头结点的技巧,就可以解决这个问题。反转链表是面试中高频题目考察链表的操作其实就是考察指针的操作,是面试中的常见类型。
2024-08-17 16:12:37
772
原创 代码随想录刷题day3丨链表理论基础,203.移除链表元素,707.设计链表,206.反转链表
/ 结点的值int val;// 下一个结点// 节点的构造函数(无参)// 节点的构造函数(有一个参数)// 节点的构造函数(有两个参数)
2024-08-16 19:36:52
654
原创 代码随想录刷题day2丨209.长度最小的子数组,59.螺旋矩阵II,区间和,开发商购买土地,数组专题总结
数组是存放在连续内存空间上的相同类型数据的集合。数组下标都是从0开始的。数组内存空间的地址是连续的数组的元素是不能删的,只能覆盖。数组的经典题目循环不变量原则暴力解法时间复杂度:O(n)二分法时间复杂度:O(logn)通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。暴力解法时间复杂度:O(n^2)双指针时间复杂度:O(n)滑动窗口的精妙之处在于根据当前子序列和大小的情况,不断调节子序列的起始位置。从而将O(n^2)的暴力解法降为O(n)。
2024-08-15 16:22:26
772
原创 request 和 response
获取请求数据的请求头,请求行,请求体tomcat 会把请求数据解析,并且存储在 request 对象中,然后我们直接从 servlet 对象中取就可以用了:响应数据的响应头,响应行,响应体业务的封装数据设置到响应数据包中来封装数据进 response 对象中,tomcat 会把封装数据解析成特定格式返回给浏览器。
2024-05-20 13:53:09
774
原创 2024.5.19 MVC 与 三层架构
负责界面的显示,以及与用户的交互功能,例如表单、网页等。可以理解为一个分发器,用来决定对于视图发来的请求,需要用哪一个模型来处理,以及处理完后需要跳回到哪一个视图。即用来连接视图和模型。实际开发中,通常用控制器对客户端的请求数据进行封装(如将form表单发来的若干个表单字段值,封装到一个实体对象中),然后调用某一个模型来处理此请求,最后再转发请求(或重定向)到视图(或另一个控制器)。模型持有所有的数据、状态和程序逻辑。模型接受视图数据的请求,并返回最终的处理结果。
2024-05-19 14:05:59
387
原创 JSON学习心得2024.5.9
因为JSON格式仅仅是文本,它能够轻松地在服务器浏览器之间传输,并用作任何编程语言的数据格式。因为JSON语法由JavaScript对象标记法衍生而来,所以很少需要其他额外的软件来处理JavaScript中的JSON。因此,如果以JSON格式从服务器接收数据,那么可以像JavaScript对象一样使用它。通过JSON.parse()解析数据,这些数据会成为JavaScript对象。而在JavaScript中,字符串可以由双引号和单引号编写。在JSON中,键必须是字符串,由双引号包围。
2024-05-09 11:25:33
279
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人