自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 代码随想录day22|回溯法03

用示例中的[1, 2, 2] 来举例,如图所示: (区别就是集合里有重复元素了,而且求取的子集要去重。那么关于回溯算法中的去重问题,二、491.递增子序列。

2024-09-13 22:13:31 416

原创 代码随想录day21|回溯法02

在处理组合问题的时候,递归参数需要传入startIndex,表示下一轮递归遍历的起始位置,这个startIndex就是切割线。

2024-09-12 22:56:36 755

原创 代码随想录day20|回溯法01

与套路相同,此题还需要加一个bool型数组used,用来记录同一树枝上的元素是否使用过。这个集合去重的重任就是used来完成的。一、回溯法。。,如果想让回溯法高效一些,可以加一些剪枝的操作,但也改不了回溯法就是穷举的本质。例如:{1, 2} 和 {2, 1} 在组合上,就是一个集合,因为不强调顺序,而要是排列的话,{1, 2} 和 {2, 1} 就是两个集合了。记住组合无序,排列有序,就可以了。

2024-09-11 12:37:44 635

原创 代码随想录算法训练营day19|二叉树07

给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]思路:参数就是当前节点,以及两个结点 p、q。返回值是要返回最近公共祖先,所以是TreeNode *遇到空返回就可以了。

2024-09-10 13:19:56 864

原创 代码随想录算法训练营day18|二叉树06

示例 2: 输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4 输出: 5 解释: 节点 5 和节点 4 的最近公共祖先是节点 5。因为根据定义最近公共祖先节点可以为节点本身。那么我们来说一说,如果 root == q,或者 root == p,说明找到 q p ,则将其返回,这个返回值,后面在中节点的处理过程中会用到,那么中节点的处理逻辑,下面讲解。例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]

2024-09-10 11:23:09 810

原创 代码随想录算法训练营day17|二叉树05

合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。如果节点不存在,则返回 NULL。题目中说了输入的数组大小一定是大于等于1的,所以我们不用考虑小于1的情况,那么当递归遍历的时候,如果传入的数组大小为1,说明遍历到了叶子节点了。其实本题是同样的道理,我们在寻找一个不符合条件的节点,如果没有找到这个节点就遍历了整个树,如果找到不符合的节点了,立刻返回。递归函数的参数传入的就是根节点和要搜索的数值,返回的就是以这个搜索数值所在的节点。

2024-09-09 23:40:13 597

原创 代码随想录算法训练营day16|二叉树04

给定一个二叉树,在树的最后一行找到最左边的值。示例 1:示例 2:思路:递归:1、确定参数和返回值树的根节点、确定最深层、返回值为空2、确定终止条件左右节点为空时,确定为叶子节点,此时记录下深度3、单层逻辑在找最大深度的时候,递归的过程中依然要使用回溯递归法迭代法。

2024-08-03 18:51:19 476

原创 代码随想录算法训练营day15|二叉树03

给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树 [3,9,20,null,null,15,7]返回 true。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4]返回 false。思路:递归思想1、确定递归函数参数和返回值参数:当前传入节点 返回值:传入节点为根节点的树的高度2、终止条件节点为空即终止3、单层递归逻辑。

2024-08-03 17:34:33 829

原创 代码随想录算法训练营day14|二叉树02

翻转一棵二叉树。思路:用层序遍历。

2024-08-01 17:57:24 822

原创 代码随想录算法训练营day13|二叉树01

刚刚我们说过了二叉树有两种存储方式顺序存储,和链式存储,顺序存储就是用数组来存,这个定义没啥可说的,我们来看看链式存储的二叉树节点的定义方式。C++int val;二叉树的定义和链表是差不多的,相对于链表 ,二叉树的节点里多了一个指针, 有两个指针,指向左右孩子。int val;

2024-08-01 15:06:25 1633

原创 代码随想录算法训练营day11|栈与队列02

根据 逆波兰表示法,求表达式的值。有效的运算符包括 + , - , * , /。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例 3:输入: ["10", "6", "9", "3", "+", "-11", " * ", "/", " * ", "17", "+", "5", "+"]输出: 22逆波兰表达式:是一种后缀表达式,所谓后缀就是指运算符写在后面。

2024-07-30 14:00:04 603

原创 代码随想录day10|栈与队列01

栈和队列是STL(C++标准库)里面的两个数据结构。C++标准库是有多个版本的,要知道我们使用的STL是哪个版本,才能知道对应的栈和队列的实现原理。栈提供push 和 pop 等等接口,所有元素必须符合先进后出规则,所以栈不提供走访功能,也不提供迭代器(iterator)。不像是set 或者map 提供迭代器iterator来遍历所有元素。所以STL中栈往往不被归类为容器,而被归类为container adapter(容器适配器)。

2024-07-28 21:53:22 969

原创 代码随想录算法训练营Day9|字符串02

字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转操作。输入:输入共包含两行,第一行为一个正整数 k,代表右旋转的位数。例如,对于输入字符串 "abcdefg" 和整数 2,函数应该将其转换为 "fgabcde"。解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。输出:输出共一行,为进行了右旋转操作后的字符串。给定一个字符串,逐个翻转字符串中的每个单词。

2024-07-26 00:18:50 373

原创 代码随想录算法训练营Day8|字符串01

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

2024-07-25 23:35:49 291

原创 代码随想录算法训练营day7|哈希表02

383. 赎金信。

2024-07-23 17:59:47 768

原创 代码随想录算法训练营Day6|哈希表01

std::map也是一样的道理。实际上功能都是一样一样的, 但是unordered_set在C++11的时候被引入标准库了,而hash_set并没有,所以建议还是使用unordered_set比较好,这就好比一个是官方认证的,hash_set,hash_map 是C++11标准之前民间高手自发造的轮子。当我们要使用集合来解决哈希问题的时候,优先使用unordered_set,因为它的查询和增删效率是最优的,如果需要集合是有序的,那么就用set,如果要求不仅有序还要有重复数据的话,那么就用multiset。

2024-07-23 01:29:35 683

原创 代码随想录算法训练营第四天| 链表02

链表的种类主要为:单链表,双链表,循环链表链表的存储方式:链表的节点在内存中是分散存储的,通过指针连在一起。链表是如何进行增删改查的。数组和链表在不同场景下的性能分析。虚拟头结点是处理链表问题的一个好方法。每次对应头结点的情况都要单独处理,所以使用虚拟头结点的技巧,就可以解决这个问题。

2024-07-21 20:30:17 684

原创 代码随想录算法训练营第三天| 链表01

由于刷leetcode时,链表是定义好的,往往会忽略。

2024-07-19 23:51:14 887

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

数组是存放在连续内存空间上的相同类型数据的集合。数组下标都是从0开始的。数组内存空间的地址是连续的因为数组在内存空间的地址是连续的,元素增删会导致其他元素地址变动。元素只能覆盖。

2024-07-19 00:19:31 1680

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

数组基础数组在内存空间的地址是连续的,不能增删,只能覆盖。二分查找二分法使用条件:有序数组、查找某一特定元素左闭右闭区间和左闭右开区间都实现了二分查找算法来解决查找目标值的问题,但采用了不同的区间定义方式,要注意区间的定义就是不变量,在循环中坚持根据查找区间的定义来做边界处理,就是循环不变量规则。移除元素暴力法虽然效率低下,但是能锻炼代码思维能力。双指针法简单且高效。

2024-07-18 13:58:26 1759

空空如也

空空如也

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

TA关注的人

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