自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。

2023-06-25 22:01:16 43

原创 代码随想录算法训练营第二十四天|

for循环每次从startIndex开始遍历,然后用path保存取到的节点i,backtracking的下面部分就是回溯的操作了,撤销本次处理的结果。给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。

2023-06-20 22:01:36 42

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

给定一个二叉搜索树,同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>=L)。你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。

2023-06-19 22:01:01 41

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

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。首先找到需要删除的节点;给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。

2023-06-15 22:39:57 38

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

给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。

2023-06-14 21:49:49 27

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

给定一个不含重复元素的整数数组。通过给定的数组构建最大二叉树,并且输出这个树的根节点。

2023-06-13 22:04:14 27

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

给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。给定一个二叉树,在树的最后一行找到最左边的值。找最大深度的时候,递归的过程中依然要使用回溯。根据一棵树的中序遍历与后序遍历构造二叉树。注意: 你可以假设树中没有重复的元素。

2023-06-10 21:54:17 84

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

本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。给定一个二叉树,返回所有从根节点到叶子节点的路径。给定一个二叉树,判断它是否是高度平衡的二叉树。说明: 叶子节点是指没有子节点的节点。计算给定二叉树的所有左叶子之和。

2023-06-09 21:51:21 26

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

给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

2023-06-08 22:06:41 24

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

给你一个二叉树,请你返回其按 层序遍历 得到的节点值。(即逐层地,从左到右访问所有节点)。

2023-06-07 21:52:21 23

原创 代码随想录算法训练营第十四天|二叉树遍历

后序遍历,先序遍历是中左右,后续遍历是左右中,那么我们只需要调整一下先序遍历的代码顺序,就变成中右左的遍历顺序,然后在反转result数组,输出的结果顺序就是左右中了。

2023-06-07 11:45:30 35

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

寻找前k个最大元素流程如图所示:(图中的频率只有三个,所以正好构成一个大小为3的小顶堆,如果频率更多一些,则用这个小顶堆进行扫描)

2023-06-05 22:00:51 53

原创 代码随想录算法训练营第十一天|

给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。

2023-06-03 19:57:04 45 1

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

使用栈实现队列的下列操作:push(x) -- 将一个元素放入队列的尾部。pop() -- 从队列首部移除元素。peek() -- 返回队列首部的元素。empty() -- 返回队列是否为空。

2023-06-02 21:04:52 29

原创 代码随想录算法训练营第九天|KMP算法

这是一个在面试中很好的问题。KMP算法通过利用模式串的最长公共前后缀信息,在匹配过程中尽可能地减少不必要的比较次数,提高了匹配的效率。这种预处理的方式使得KMP算法的时间复杂度为O(m+n),其中m为模式串的长度,n为文本串的长度。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。KMP(Knuth-Morris-Pratt)算法是一种用于字符串匹配的高效算法,其主要目的是在文本串中查找给定的模式串。

2023-06-01 22:02:14 38

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

比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。给定一个字符串 s 和一个整数 k,从字符串开头算起, 每计数至 2k 个字符,就反转这 2k 个字符中的前 k 个字符。请实现一个函数,把字符串 s 中的每个空格替换成"%20"。输入:["H","a","n","n","a","h"]输出:["h","a","n","n","a","H"]输入:["h","e","l","l","o"]输出:["o","l","l","e","h"]

2023-05-31 22:02:45 27 1

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

在看 {-1, -1 ,2} 这组数据,当遍历到 第一个 -1 的时候,只要前一位没有-1,那么 {-1, -1 ,2} 这组数据一样可以收录到 结果集里。给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0。满足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ]给定数组 nums = [-1, 0, 1, 2, -1, -4],使用数组是本题的一个优解。

2023-05-30 21:56:54 53 1

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

哈希表理论基础Java的hashmap和Hashset建议先看的课程可能会理解的更透彻。1.HashMap1>创建对象:HashMap map=new HashMap();2>给map里面放key-value:map.put(key,value);3>判断key在不在里面:map.containkey(key);4>判断value值在不在里面:map.containValue(value);

2023-05-29 22:09:53 33 1

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

fast首先走n + 1步 ,为什么是n+1呢,因为只有这样同时移动的时候slow才能指向删除节点的上一个节点(方便做删除操作)。可以使用快慢指针法,分别定义 fast 和 slow 指针,从头结点出发,fast指针每次移动两个节点,slow指针每次移动一个节点,如果 fast 和 slow指针在途中相遇 ,说明这个链表有环。跟答案的思路大致相似又不太一样,不过也差不太多,只要画出图来就差不多能一步一步写出来,注意循环的条件要注意顺序,顺序不能错,不然会出现错误或者死循环。如果链表无环,则返回 null。

2023-05-27 23:19:59 43 1

原创 代码随想录算法训练营第三天|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-05-26 21:22:12 36 1

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

思路类似双指针但是有个地方需要注意,相加值大于目标值时不能用if,要用while循环找出最小大于目标值的长度,举个例子,target=20,nums = {1,1,1,1,1,1000,11,1},不难看出使用if进行判断不能满足要求。示例 1: 输入:nums = [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释:平方后,数组变为 [16,1,0,9,100],排序后,数组变为 [0,1,9,16,100]其次循环方向搞清楚,n是否为奇数,做起来就不会有太大的问题。

2023-05-25 20:03:12 54 2

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

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。这种方法通过每一次比较,将搜索范围缩小一半,从而在较短的时间内找到目标元素。当然,二分法的前提是数组必须是有序的,如果数组中存在重复元素,它可能无法保证找到的是第一个或最后一个目标元素,而是其中一个重复元素的索引。考虑二分法的区间,通常来说有两种,左闭右开和左闭右闭。

2023-05-24 19:43:12 109 1

空空如也

空空如也

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

TA关注的人

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