自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

原创 day36 第八章 贪心算法 part05● 435. 无重叠区间 ● 763.划分字母区间 ● 56. 合并区间

这道题目leetcode标记为贪心算法,说实话,我没有感受到贪心,找不出局部最优推出全局最优的过程。就是用最远出现距离模拟了圈字符的行为。但这道题目的思路是很巧妙的,所以有必要介绍给大家做一做,感受一下。i++){//记录每一个字母最后出现的位置i++){size++;size = 0;

2023-12-20 12:53:55 789

原创 day35 | 第八章 贪心算法 part04● 860.柠檬水找零 ● 406.根据身高重建队列 ● 452. 用最少数量的箭引爆气球

局部最优可推出全局最优,找不出反例,那就试试贪心。一些同学可能也会疑惑,你怎么知道局部最优就可以推出全局最优呢?有数学证明么?在贪心系列开篇词。

2023-12-15 18:03:58 93

原创 day34|第八章 贪心算法 part03● 1005.K次取反后最大化的数组和 ● 134. 加油站● 135. 分发糖果

对于本题首先给出了暴力解法,暴力解法模拟跑一圈的过程其实比较考验代码技巧的,要对while使用的很熟练。然后给出了两种贪心算法,对于第一种贪心方法,其实我认为就是一种直接从全局选取最优的模拟操作,思路还是很巧妙的,值得学习一下。对于第二种贪心方法,才真正体现出贪心的精髓,用局部最优可以推出全局最优,进而求得起始位置。return -1;这在leetcode上是一道困难的题目,其难点就在于贪心的策略,如果在考虑局部的时候想两边兼顾,就会顾此失彼。

2023-12-14 17:10:58 81

原创 day32|第八章 贪心算法 part02● 122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II

股票问题其实是一个系列的,属于动态规划的范畴,因为目前在讲解贪心系列,所以股票问题会在之后的动态规划系列中详细讲解。可以看出有时候,贪心往往比动态规划更巧妙,更好用,所以别小看了贪心算法。本题中理解利润拆分是关键点!不要整块的去看,而是把整体利润拆为每天的利润。一旦想到这里了,很自然就会想到贪心了,即:只收集每天的正利润,最后稳稳的就是最大利润了。i++){这道题目关键点在于:不用拘泥于每次究竟跳几步,而是看覆盖范围,覆盖范围内一定是可以跳过来的,不用管是怎么跳的。

2023-12-13 15:52:36 85

原创 day31 第八章 贪心算法 part01● 理论基础 ● 455.分发饼干 ● 376. 摆动序列 ● 53. 最大子序和

相反, [1,4,7,2,5] 和 [1,7,4,5,5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。在计算是否有峰值的时候,大家知道遍历的下标 i ,计算 prediff(nums[i] - nums[i-1]) 和 curdiff(nums[i+1] - nums[i]),如果。给定一个整数序列,返回作为摆动序列的最长子序列的长度。注意版本一的代码中,可以看出来,是先遍历的胃口,在遍历的饼干,那么可不可以 先遍历 饼干,在遍历胃口呢?

2023-12-08 19:00:08 60

原创 day30| 第七章 回溯算法part06● 332.重新安排行程 ● 51. N皇后 ● 37. 解数独 ● 总结

一个机场映射多个机场,机场之间要靠字母序排列,一个机场映射多个机场,可以使用std::unordered_map,如果让多个机场之间再有顺序的话,就是用std::map 或者std::multimap 或者 std::multiset。所以我倾向于说本题应该使用回溯法,那么我也用回溯法的思路来讲解本题,其实深搜一般都使用了回溯法的思路,在图论系列中我会再详细讲解深搜。实际上确实是深搜,但这是深搜中使用了回溯的例子,在查找路径的时候,如果不回溯,怎么能查到目标路径呢。这两个结构,我选择了后者,因为如果使用。

2023-12-06 16:00:36 57

原创 day29 第七章 回溯算法part05* 491.递增子序列* 46.全排列* 47.全排列 II

continue;continue;都是可以的,这也是很多同学做这道题目困惑的地方,知道也行而也行,但是就想不明白为啥。所以我通过举[1,1,1]的例子,把这两个去重的逻辑分别抽象成树形结构,大家可以一目了然:为什么两种写法都可以以及哪一种效率更高!这里可能大家又有疑惑,既然也行而也行,那为什么还要写这个条件呢?直接这样写 不就完事了?continue;其实并不行,一定要加上或者。

2023-12-05 13:09:35 34

原创 day28 第七章 回溯算法● 93.复原IP地址 ● 78.子集 ● 90.子集II

示例: 输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]求排列问题的时候,就要从0开始,因为集合是有序的,{1, 2} 和{2, 1}是两个集合,排列问题我们后续的文章就会讲到的。(也可以放到递归函数参数里)其实子集也是一种组合问题,因为它的集合是无序的,子集{1,2} 和 子集{2,1}是一样的。startIndex一定是需要的,因为不能重复分割,记录下一层递归分割的起始位置。

2023-12-04 20:06:30 22

原创 day27 第七章 回溯算法part03● 39. 组合总和● 40.组合总和II● 131.分割回文串

力扣题目链接(opens new window)给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:示例 1:示例 2:《代码随想录》算法视频公开课 (opens new window):Leetcode:39. 组合总和讲解 (opens new window),相信结合视频再看本篇题解,更有助于大家对本题的理解。题目中的无限制重复被选取,吓得我赶紧想

2023-12-01 16:30:58 56

原创 day 28 | 第七章 回溯算法part02 ● 216.组合总和III● 17.电话号码的字母组合

题解: 多一个总和的约束条件, 其他的不变, 牢记回溯的深度还有宽度的概念, 递归的层数是深度,单层内的循环是递归的宽度。例如 k = 2,n = 4的话,就是在集合[1,2,3,4,5,6,7,8,9]中求 k(个数) = 2, n(和) = 4的组合。,无非就是多了一个限制,本题是要找到和为n的k个数的组合,而整个集合已经是固定的了[1,...,9]。本题就是在[1,2,3,4,5,6,7,8,9]这个集合中找到和为n的k个数的组合。本题k相当于树的深度,9(因为整个集合就是9个数)就是树的宽度。

2023-11-30 15:27:18 51

原创 day24 | 第七章 回溯算法part01● 理论基础 ● 77. 组合

回溯法也可以叫做回溯搜索法,它是一种搜索的方式。在二叉树系列中,我们已经不止一次,提到了回溯,例如二叉树:以为使用了递归,其实还隐藏着回溯 (opens new window)。回溯是递归的副产品,只要有递归就会有回溯。所以以下讲解中,回溯函数也就是递归函数,指的都是一个函数。

2023-11-29 12:45:00 62 1

原创 day23 | 第六章 二叉树part09 ● 669. 修剪二叉搜索树 ● 108.将有序数组转换为二叉搜索树 ● 538.把二叉搜索树转换为累加树 ● 总结篇

在。

2023-11-28 12:45:08 38 1

原创 day 22 第六章 二叉树[数学公式]part08 ● 235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点

给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。如图,我们从根节点搜索,第一次遇到 cur节点是数值在[q, p]区间中,即 节点5,此时可以说明 q 和 p 一定分别存在于 节点 5的左子树,和右子树中。将删除节点(元素7)的左孩子放到删除节点(元素7)的右子树的最左面节点(元素8)的左孩子上,就是把5为根节点的子树移到了8的左孩子的位置。动画中的二叉搜索树中,删除元素7, 那么删除节点(元素7)的左孩子就是5,删除节点(元素7)的右子树的最左面节点是元素8。如果找到了,删除它。

2023-11-27 16:27:02 28

原创 day21 第六章 二叉树part07● 530.二叉搜索树的最小绝对差 ● 501.二叉搜索树中的众数 ● 236. 二叉树的最近公共祖先

示例 2: 输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4 输出: 5 解释: 节点 5 和节点 4 的最近公共祖先是节点 5。示例 1: 输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1 输出: 3 解释: 节点 5 和节点 1 的最近公共祖先是节点 3。例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]进阶:你可以不使用额外的空间吗?

2023-11-26 22:47:47 25 1

原创 day20 | 第六章 二叉树 part06● 654.最大二叉树 ● 617.合并二叉树 ● 700.二叉搜索树中的搜索 ● 98.验证二叉搜索树

合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。给定二叉搜索树(BST)的根节点和一个值。给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。在上述示例中,如果要找的值是 5,但因为没有节点值为 5,我们应该返回 NULL。通过给定的数组构建最大二叉树,并且输出这个树的根节点。之前我们讲的都是普通二叉树,那么接下来看看二叉搜索树。给定一个二叉树,判断其是否是一个有效的二叉搜索树。

2023-11-21 15:36:45 26

原创 day18 | 二叉树part05

题解: 这个题要是忘记了, 先回想二叉树遍历特征, 再思考数组的组成, 后序的最后一个必定是节点, 以这个为突破口进行递归.还有就是注意前闭后开这类规则的前后统一。题解: 这个题是自己写出来的,而且意外的和答案几乎一样, 说明现在的思路和思考逻辑基本是顺畅的了. 注意定义返回值的情况是什么, 把握解题思路.给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。返回 true, 因为存在目标和为 22 的根节点到叶子节点的路径 5->4->11->2。

2023-11-20 17:46:00 30 1

原创 day17 | 第六章 二叉树part04

解题: 这个题用到回溯的思想,回溯的难点主要是,我们要在遍历的下面写上回溯, 也就是我们每一个遍历开始之后,当返回到这里的时候就是回溯到这里了,这时候处理回溯的代码.解答: 这个题主要通过后序遍历计算每个节点的高度来判断是不是高度差大于一,大于一说明不是平衡二叉树,返回-1即可。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。给定二叉树 [1,2,2,3,3,null,null,4,4]给定二叉树 [3,9,20,null,null,15,7]

2023-11-07 12:18:12 50

原创 day16 第六章 二叉树part03

今日内容:104.二叉树的最大深度 559.n叉树的最大深度111.二叉树的最小深度222.完全二叉树的节点个数。

2023-11-01 11:55:47 77 1

原创 day14/day15 二叉树前中后序遍历 | 层序遍历

这里帮助大家确定下来递归算法的三个要素。

2023-10-30 20:25:27 62 1

原创 day13 第五章 栈与队列part03

解答: 这个题比较复杂,要用小顶堆或者大顶堆来实现,这里是用小顶堆实现的,注意如何写comparable的lamda函数.还有怎么运用map方法和map.entry方法以及怎么直接把数组的数快速取出来.解答: 这个题较为复杂一些,用自己的队列来解决会更方便,总的来说,核心思路就是在进入队列的时候,把队列中比自己小的数字全部抛出,这样就保证队列头部的数字始终是最大值,所以每次返回的都是最大值.给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。返回滑动窗口中的最大值。

2023-10-26 17:14:30 69

原创 day11 第五章| 栈与队列02

解题思路比较简单明了,用栈来匹配不同的括号的情况,读入一个左括号,就存一个右括号.读进来右括号就弹出一个右括号来进行匹配.只有最后所有的括号都匹配且栈内为空才是正常匹配的情况.输入: ["10", "6", "9", "3", "+", "-11", " * ", "/", " * ", "17", "+", "5", "+"]给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。

2023-10-25 20:19:57 22 1

原创 day10 理论基础● 232.用栈实现队列● 225. 用队列实现栈

栈和队列入门

2023-10-23 23:28:54 25 1

原创 day09| 字符串part02 | 28. 实现 strStr() | 459.重复的子字符串| 字符串总结 | 双指针回顾

题目链接:实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 1: 输入: haystack = "hello", needle = "ll" 输出: 2示例 2: 输入: haystack = "aaaaa", needle = "bba" 输出: -1说明: 当 needle 是空字符串时,我们应当返回什么值呢?

2023-10-23 21:26:23 62 1

原创 day08 | 字符串part01| 344.反转字符串| 541. 反转字符串II| 剑指Offer 05.替换空格 | 151.翻转字符串里的单词 | 剑指Offer58-II.左旋转字符

题目大意:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。示例 1:输入:["h","e","l","l","o"]输出:["o","l","l","e","h"]示例 2:输入:["H","a","n","n","a","h"]

2023-09-13 14:24:42 65 1

原创 day07-第三章 哈希表part02 || 454.四数相加II || 383. 赎金信|| 15. 三数之和|| 18. 四数之和

454.四数相加II题目大意:给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0。为了使问题简单化,所有的 A, B, C, D 具有相同的长度 N,且 0 ≤ N ≤ 500。所有整数的范围在 -2^28 到 2^28 - 1 之间,最终结果不会超过 2^31 - 1。输出:2。

2023-06-17 00:54:13 124 1

原创 day06 哈希表 || 242.有效的字母异位词 || 349. 两个数组的交集 || 202. 快乐数 || 1. 两数之和

题目大意:给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例 1: 输入: s = "anagram", t = "nagaram" 输出: true示例 2: 输入: s = "rat", t = "car" 输出: false你可以假设字符串只包含小写字母。这个题很简单的地方就在于你可以假设只有26个字母,这样你用一个26给空间的区域就能完成计算了,记录每一位的增加和减少即可。最后如果字符相等,那么最后这个record里的值应该为0;

2023-06-10 07:30:04 44

转载 day04-|24. 两两交换链表中的节点 | 19.删除链表的倒数第N个节点 |面试题 02.07. 链表相交 | 142.环形链表II

这是利用环形链表中快指针走两步,慢指针走一步,快指针一定会回到慢指针上,然后多走的路程就是圈的大小的 i 倍的原理写的。官方的答案很巧妙,我直接在这里解释引用一下好了,一开始的方法和我的思路是一样的,找到第一次相遇点,但是这里直接用第一次相遇点开始重新让慢指针从头走,快指针一步步走,然后相遇的地方就是他的起始点,这是为什么呢?我用了一个巧妙的办法,先用一次遍历算出两个链表之间的个数差异n,然后让长的链表先走n次,然后再和短的链表一起前进,同时判断是否是同一个指针位置,这样第一个交点就是答案了。

2023-06-09 01:44:08 37

原创 day03|链表part01| 203.移除链表元素 ● 707.设计链表 ● 206.反转链表

删除链表中等于给定值 val 的所有节点。示例 1: 输入:head = [1,2,6,3,4,5,6], val = 6 输出:[1,2,3,4,5]示例 2: 输入:head = [], val = 1 输出:[]示例 3: 输入:head = [7,7,7,7], val = 7 输出:[]这是链表的初级题目了,还算简单,用了我理解的虚拟头链表写的。

2023-06-04 08:26:38 119 1

原创 代码训练营day02|第一章 数组part02 | 977.有序数组的平方 | 209.长度最小的子数组 | 59.螺旋矩阵II

977.有序数组的平方 | 209.长度最小的子数组 | 59.螺旋矩阵II

2023-05-29 00:33:50 123 1

原创 代码训练营-day01|Leetcode704 二分法查找 | 27 移除元素

自己一开始第一想法写的代码。但是这有点投机取巧,没有理解这个方法中的一个关键问题,就是查找的定义域,无论是两边都闭合还是左闭右开核心都是查找了一个区域之后再查找的区域要完全略过已经确定没有的区域,接下来理解后的代码是这样的。这个感觉就很好。

2023-05-27 07:51:48 149 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除