自定义博客皮肤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)
  • 资源 (1)
  • 收藏
  • 关注

原创 代码随想录算法训练营第三十一天| 455.分发饼干,376. 摆动序列,53. 最大子序和

贪心算法其实没有什么规律可言,不用花心思去研究其规律,没有思路立刻看题解。基本贪心题目有两个极端,要么特别简单,要么死活想不出来。学完贪心再看动态规划,就会了解贪心和动态规划的区别。

2023-12-01 20:04:45 340

原创 代码随想录算法训练营第二十九天| 491.递增子序列,46.全排列,47.全排列 II

本题与上题的不同在于数组中会有重复的元素,但我们最后要求的是不重复的全排列,可以用used数组来存储数组元素状态,先对nums数组排序,used[i-1] == false说明同一层i-1使用过,used[i-1] == true说明同一树枝使用过,而明显我们需要处理的是同层去重,即used[i-1] == false,虽然使用used[i-1] == true也同样能做出来,但是树的宽度和深度都会变大,时间花销不划算。代码如下:(上述两个坑都踩了一遍)

2023-11-20 20:52:03 34

原创 代码随想录算法训练营第二十八天| 93.复原IP地址,78.子集,90.子集II

但在解题的过程中卡了很久,对照看了题解和自己的代码,思路是一致的,最后发现是我在判断数字合法的时候的条件是nums<255,导致没结果输出,改成nums<=255后,答案就正确了,这些小细节还是要仔细些才行。本题是基于上题,难度稍微加大了些。首先对于数组中有重复元素,又要求结果中不包含重复子集的问题,一般需要先对数组进行排序;其次去重时,需要判断是树层去重,还是树枝去重。此题明显是一个分割问题,利用回溯模版即可解决。回溯的终止条件为字符串s正好能被完整分割为4段且下一次分割的位置在字符串末尾。

2023-11-15 15:13:27 32

原创 代码随想录算法训练营第二十七天| 39. 组合总和,40.组合总和II,131.分割回文串

这里需要注意的是 i > startIndex 而不是 i > 0,如果写成i > 0会少很多结果,因为树枝回溯时当i 等于 startIndex且 i > 0,会直接 continue 掉,例如candidates=[10,1,2,7,6,1,5],target 为 8,若写为i > 0,则会漏掉[1,1,6],因为第 2 个 1 会被 continue 掉。判断回文:具体来说,给定一个字符串 s,长度为 n,它成为回文字符串的充分必要条件是s[0]==s[n-1]且s[1:n-2]是回文字符串。

2023-10-31 09:51:22 35

原创 代码随想录算法训练营第二十五天| 216.组合总和III ,17.电话号码的字母组合

需要注意处理输入为空的边界情况,不然会出现空指针的错误。本题直接套用回溯法的模版还算比较简单,但要注意细节的处理,二刷时希望还能理解并通过。2.同LeetCode77,可以对for循环进行剪枝,i<=9应写为9-(k-path.size())+1,因为再往后,凑不齐k个数了,就无需遍历。思路:用二维字符串数组根据数字的值作为下标来取对应的字母字符串,使用回溯法来灵活处理根据数字字符串长度个for循环的问题。本题和LeetCode77有相似之处,只是回溯算法的递归终止条件需要判断当前k个数之和是否等于n。

2023-10-13 10:43:19 39

原创 代码随想录算法训练营第二十四天| 理论基础,77. 组合

如果使用暴力搜索,当k很大时,用for循环嵌套连暴力都写不出来,例如,当n为100,k为50,就要写50层for循环,但可以使用回溯法用递归来解决嵌套层数的问题。当path数组的大小达到了k,说明找到了一个子集大小为k的组合,将其存放至结果集中。回溯法解决的问题都可以抽象为树形结构,因为回溯法解决的都是在集合中递归查找子集,集合的大小就构成了树的宽度,递归的深度,构成了树的深度。本题还可以进行剪枝优化:如果for循环选择的起始位置之后的元素个数已经不足我们需要的元素个数了,那么就没必要搜索了。

2023-10-11 17:51:28 38

原创 代码随想录算法训练营第二十三天| 669. 修剪二叉搜索树,108.将有序数组转换为二叉搜索树 ,538.把二叉搜索树转换为累加树

思路:遇到不符合条件的节点,对其采用和LeetCode450一样的思路进行删除,将两个条件放在一起判断虽然也能通过,但是这种思路会增加递归的复杂度,会做许多无意义的遍历,例如当root.val

2023-10-10 11:41:33 63

原创 代码随想录算法训练营第二十二天| 235. 二叉搜索树的最近公共祖先,701.二叉搜索树中的插入操作 ,450.删除二叉搜索树中的节点

2.找到key对应的节点:1)如果该节点的左右孩子均为null,则直接删除返回null即可;4)如果左右孩子均不为空,需要先遍历右子树,找到其最左边的节点,并将左子树接到最左边节点的左孩子上,返回该节点的右孩子作为当前根节点。由于二叉搜索树是有序的,如果当前节点的值在[p,q]之间,则从上至下遍历第一次遇到的节点便是最近的公共祖先,因为此后不管是向左遍历还是向右遍历,都会找不到另一个节点了(往左走都是小于当前节点的值不会找到q节点,往右走全是大于当前节点的值不会找到p节点了)。

2023-10-09 21:01:52 26

原创 代码随想录算法训练营第二十一天| 530.二叉搜索树的最小绝对差, 501.二叉搜索树中的众数 ,236. 二叉树的最近公共祖先

若当前count等于maxCount,则加入结果集中,若大于maxCount,则将result清空,说明之前的值都不满足条件。思路:若能自底向上查找,便能找到公共祖先了。二叉树如何能自底向上查找呢?思路:遍历一边二叉树,用map来统计每个元素出现的次数,记录下maxCount,最后再判断map中每个节点的值是否等于maxCount,等于就加入result中。判断逻辑是 如果递归遍历遇到q,就将q返回,遇到p 就将p返回,那么如果 左右子树的返回值都不为空,说明此时的中节点,一定是q 和p 的最近祖先。

2023-10-07 20:17:46 20

原创 代码随想录算法训练营第二十天| 654.最大二叉树, 617.合并二叉树 ,700.二叉搜索树中的搜索 ,98.验证二叉搜索树

2.样例中最小节点可能是int的最小值,如果这样使用最小的int来比较也是不行的。建议避免初始化最小值,可以采取保存前一个节点的方法来进行是否升序的比较。简单搜索题,递归终止条件:如果root为null则返回null;两树遍历的关键点在于递归终止条件的确定:当root1为null时,合并的新节点应返回root2,同理如果root2为null,应返回root1,不考虑全为null的情况了,因为null加null还是null。若为二叉搜索树,则中序遍历的结果应为升序,本题容易陷入两个陷阱:1.

2023-09-25 21:17:55 15

原创 代码随想录算法训练营第十八天| 513.找树左下角的值,112. 路径总和,113.路径总和ii,106.从中序与后序遍历序列构造二叉树,105.从前序与中序遍历序列构造二叉树

如何根据后序和中序构造一个唯一的二叉树:以后序数组的最后一个元素为切割点,先切中序数组,根据中序数组反过来再切后序数组。一层一层切下去,每次后序数组最后一个元素是节点元素。注意,中序数组大小一定和后序数组的大小相同。注意,result.add(new LinkedList(path))时,一定要重新new一个LinkedList,不然add进去的是[],对java的这种机制不是很了解,就当是踩了一个小坑。需要搜索整棵树,但不需要对返回值进行处理,所以递归不需要返回值。

2023-09-24 17:14:47 19

原创 代码随想录算法训练营第十七天| 110.平衡二叉树,257. 二叉树的所有路径, 404.左叶子之和

LeetCode

2023-09-23 17:37:29 15

原创 代码随想录算法训练营第十六天| 104.二叉树的最大深度,111.二叉树的最小深度, 222.完全二叉树的节点个数

在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。对于情况二,分别递归左孩子,和右孩子,递归到某一深度一定会有左孩子或者右孩子为满二叉树,然后依然可以按照情况1来计算。可以看出如果整个树不是满二叉树,就递归其左右孩子,直到遇到满二叉树为止,用公式计算这个子树(满二叉树)的节点数量。本题可以使用前序遍历,也可以使用后序遍历,使用前序求的是深度,使用后序求的是高度。所以第1~(h-1)层的节点数是满的。

2023-09-04 11:24:15 23

原创 代码随想录算法训练营第十五天| 层序遍历,226.翻转二叉树,101.对称二叉树

二叉树的层序遍历,就是图论中的广度优先搜索在二叉树中的应用,需要借助队列来实现,上面10个题基本是用一份代码模版来做的,还比较简单。

2023-09-03 17:33:48 28

原创 代码随想录算法训练营第十四天| 二叉树理论基础,递归遍历,迭代遍历,统一迭代

int val;

2023-09-01 18:11:37 77

原创 代码随想录算法训练营第十三天| 239. 滑动窗口最大值,347.前 K 个高频元素

代码随想录算法训练营

2023-08-31 11:12:11 19

原创 代码随想录算法训练营第十一天| 20. 有效的括号 ,1047. 删除字符串中的所有相邻重复项 ,150. 逆波兰表达式求值

代码随想录算法训练营

2023-08-30 09:38:46 19

原创 代码随想录算法训练营第十天| 栈与队列理论基础,232.用栈实现队列 ,225. 用队列实现栈

本题尝试用两个队列,其中辅助队列是用来保存队列当下的元素,再将x加入到队列中,最后再将辅助队列中的元素加入到队列中,便可实现后进先出。栈是以底层容器完成其所有的工作,对外提供统一的接口,低层容器是可插拔的(也就是说我们可以控制使用哪种容器来实现栈的功能)。栈的底层实现可以是vector,deque,list 都是可以的, 主要就是数组和链表的底层实现。栈提供push和pop等等接口,所有元素必须符合先进后出规则,所以栈不提供根据索引访问,也不提供迭代器,不像set或map对象提供迭代器来遍历所有元素。

2023-08-28 21:53:21 32

原创 代码随想录算法训练营第九天| 28. 实现 strStr(),459.重复的子字符串 ,字符串总结 ,双指针回顾

代码随想录算法训练营

2023-08-27 22:06:40 25

原创 代码随想录算法训练营第八天| 344.反转字符串,541. 反转字符串II,剑指Offer 05.替换空格,151.翻转字符串里的单词 ,剑指Offer58-II.左旋转字符串

代码随想录训练营

2023-08-26 22:50:52 17

原创 代码随想录算法训练营第七天| 454.四数相加II,383. 赎金信,15. 三数之和,18. 四数之和

代码随想录算法训练营

2023-08-20 17:59:49 18

原创 代码随想录算法训练营第六天| 哈希表理论基础,242.有效的字母异位词 ,349. 两个数组的交集, 202. 快乐数 ,1. 两数之和

代码随想录算法训练营

2023-08-16 19:17:48 27

原创 代码随想录算法训练营第四天| 链表part02,24.两两交换链表中的节点 ,19.删除链表的倒数第N个节点,02.07.链表相交,142.环形链表II

代码随想录训练营

2023-08-14 18:47:27 44

原创 代码随想录算法训练营第三天| 链表理论基础笔记,203.移除链表元素 ,707.设计链表,206.反转链表

代码随想录训练营

2023-08-13 00:45:01 15

原创 代码随想录算法训练营第二天| 977.有序数组的平方 ,209.长度最小的子数组,59. 螺旋矩阵 II,总结

代码随想录训练营

2023-08-11 00:55:38 153

原创 代码随想录算法训练营第一天| 704. 二分查找、35.搜索插入位置、27. 移除元素

代码随想录训练营

2023-08-09 23:47:16 191

原创 zsh:command not found: sdkmanager的解决办法

安卓项目从windows迁移至mac上运行报zsh:command not found: sdkmanager,经实践证明下述操作可以解决该错。首先,找到Android Studio的SDK安装目录,点击红色方块右边的按钮,会弹出界面,复制sdk路径。打开terminal,输入命令cd /Users/judyming/Library/Android/sdk/tools/bin,进入bin目录,接着再输入./sdkmanager --licenses,会询问shi f一直输yes.

2021-05-13 23:47:42 3023

原创 LeetCode刷题记——两数之和(C语言)

题目描述:给定一个整数数组 nums和一个整数目标值 target,请你在该数组中找出 和为目标值 的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:nums = [3,2,4], tar...

2021-05-13 23:04:00 287

原创 汉诺塔——告之盘子总数和盘号,计算该盘子的移动次数

题目描述用1,2,...,n表示n个盘子,称为1号盘,2号盘,...。号数大盘子就大。经典的汉诺塔问题经常作为一个递归的经典例题存在。可能有人并不知道汉诺塔问题的典故。汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从下往上按大小顺序摞着64片黄金圆盘。上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间...

2019-03-29 16:34:22 5387

原创 两个有序数组的合并

数组合并题目描述编写一个程序,将两个有序数组合并成一个更大的有序数组,要求时间复杂度为O(n)。输入多组数据输入,每组输入包括两行,每行第一个数字为数组长度n,然后输入n个有序整数。输出输出合并后的数组(升序),每组输出用一个空行隔开。样例输入Copy3 1 3 53 2 4 62 1 24 3 4 5 6样例输出 Copy1 2 3 4 5 ...

2019-03-29 16:16:52 619

操作系统.pdf

操作系统.pdf

2021-09-20

空空如也

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

TA关注的人

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