自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 问答 (1)
  • 收藏
  • 关注

原创 LeetCode刷题——hot 100(3)

问题分析:用数组记录四个方向,用「行偏移量,列偏移量」描述 4 个方向,directions的四个元素分别表示右 下 左 上四个方向,用directionIndex来访问方向数组中的四个方向,是directions数组的索引,当遇到已访问的数组元素或是边界的时候,就更改访问的方向为下一个方向。问题分析:使用迭代的头插法来解决这道题目,例如链表1->2->3,使用头插法,就是把新建一个空链表,依次把1,2,3插到这个新链表的头部,就得到链表3->2->1,这就是反转后的链表。时间复杂度:O(N).

2025-09-14 15:54:28 916

原创 LeetCode刷题——hot 100(2)

连续子数组的和可以采用前缀和的差来求解,在示例2中,已知数组nums=[1,2,3],它的前缀和数组为sum=[0,1,3,6],和为k=3的,可由sum[2]-sum[0]与sum[3]-sum[2]得到,所以sum[i]的定义是前i个元素的和,即sum[i]=nums[0]+nums[1]+...+nums[i-1].为了方便求解,定义sum[0]=0。问题分析:一开始做题的时候,建立的记录字符出现次数的数组的长度是26,也就是只考虑到了小写字母,其他的都没有考虑。时间复杂度:O(N).

2025-09-09 13:39:40 917

原创 LeetCode刷题——hot 100(1)

问题分析:字母异位词的特征就是它们所含的字母完全相同只是排列的顺序不一致而已,所以使用哈希表来存储互为字母异位词,将字符串转换为字符数组对数组进行排序,因为字符串的顺序不可以改变,排序后的数组转换为的字符串就是所有字母异位词的共同特征。问题分析:这道题的关键就是去重,在遍历数组nums,也就是找第一个元素nums[i]的时候有去重,在找到满足条件的一组元素值的时候,也要对有相同数值的nums[left]和nums[right]持续去重,直到不重复为止。时间复杂度:O(N).时间复杂度:O(N).

2025-09-01 12:39:12 793

原创 LeetCode刷题——动态规划2

题目:问题分析:这道题的本质就是把这堆石头分成两堆总重量都很靠近所有石头总质量的二分之一,然后再求这两堆石头的总重量之差,这就与题目1:分割等和子集的解题思路一致了。int sum=0;sum+=stone;i++){j--){时间复杂度:O(N*target).

2025-08-28 08:11:01 1029

原创 LeetCode刷题——动态规划

如果某个问题有许多重叠的子问题,使用动态规划是最有效的。动态规划的每一个状态一定是由上一个状态推导得到的。

2025-08-23 20:06:58 758

原创 LeetCode刷题——贪心算法3

问题分析:以数字332为例,转换成数组是chars []=[3,3,2],从后往前遍历该数组,因为当前数字不是单调递增的,所以,要找到一个小于该数字且单调递增的数字(对于这一个例子来说满足条件的数字是229),首先chars[1]>chars[2],为了满足单调递增,此时的chars[1]--,chars[1]=2,再往前遍历,chars[0]>chars[1],chars[0]--,chars[0]=2,下标0以后的数字都换成9,即找到了对应的数字。时间复杂度:O(N).时间复杂度:O(N).

2025-08-19 10:22:08 422

原创 LeetCode刷题——贪心算法2

排序后的数组,按照每一项的k值插入到队列中相应的index处,最后得到的数组就是符合第i个人,前面有ki个人的身高大于等于hi的。最后的步数就是最少步数。从覆盖范围出发,不管怎么跳,覆盖范围内一定是可以跳到的,以最小的步数增加覆盖范围,覆盖范围一旦覆盖了终点,得到的就是最少步数。问题分析:贪心1:局部最优——将绝对值大的负数变成正数,整体最优——数组的和最大。贪心2:局部最优——全部都是正数的时候,将绝对值最小的数字进行反复取反,直至K用完;先将气球的半径的左端点按照从小到大的顺序排序,有重叠的,则。

2025-08-12 20:24:42 598

原创 LeetCode刷题——贪心算法1

贪心算法的本质就是每一阶段都选择局部最优,从而达到全局最优。

2025-08-09 12:19:33 382

原创 MySQL数据库学习记录——进阶篇

前缀索引:字段类型为字符串(varchar,text等)时,有时候需要索引很长的字符串,这会让索引变得很大,查询时,浪费大量的磁盘IO,影响查询效率。可以根据索引的选择性来决定,而选择性是指不重复的索引值(基数)和数据表的记录总数的比值,索引选择性越高则查询效率越高,唯一索引的选择性是1,这是最好的索引选择性,性能也是最好的。对于BTree,无论是叶子结点还是非叶子节点,都会保存数据,这样会导致一页中存储的键值减少,指针跟着减少,要同样保存大量数据,只能增加树的高度,导致性能降低;支持表锁,不支持行锁;

2025-05-12 18:45:28 70

原创 LeetCode刷题——回溯算法1

回溯是递归的副产品,只要有递归就会有回溯。回溯的本质是穷举,穷举所有可能,然后选出我们想要的答案。回溯法并不高效,它解决的问题都可以抽象为树形结构。

2025-05-12 11:16:31 253

原创 MySQL数据库学习记录——基础篇

查询所有数据库查询当前数据库创建CREATE DATABASE [IF NOT EXISTS] 数据库名[DEFAULT CHARSET 字符集] [COLLATE 排序规则];“DEFAULT CHARSET 字符集”表示默认字符集,“COLLATE 排序规则”用于指定字符数据的比较和排序顺序的规则。删除DROP DATABASE [IF EXISTS] 数据库名;使用USE 数据库名;查询当前数据库所有表创建表Create table 表名(字段1 字段1类型[comment 注释]

2025-04-28 10:00:00 1008

原创 LeetCode刷题——二叉树5

问题分析:这道题使用二叉搜索树的特性来做,即中序遍历的二叉搜索树是一个有序的数组。使用全局变量maxCount来记录当前的出现次数最多的元素出现的次数,使用count记录当前元素的次数,若count大于maxCount则清空结果集,更新maxCount为count值。问题分析:求二叉树的最小公共祖先需要从底向上遍历,而后序遍历就是天然的回溯,可以实现从底向上遍历。在回溯的过程中,必须要遍历整棵二叉树,即使已经找到结果了,依然要把其他节点遍历完,因为要使用递归函数的返回值做逻辑判断。时间复杂度O(N).

2025-04-27 10:47:44 400

原创 LeetCode刷题——二叉树4

所以后序遍历数组的最后一个元素就是二叉树的根节点,再以此根节点分割中序遍历数组为左子树和右子树,以分割的左子树长度和右子树长度在后序遍历中找到对应的左子树和右子树。问题分析:这道题采用递归的方法进行求解,每遍历一个节点,都拿targetSum减去当前节点的值,当节点是叶子结点同时targetSum减去当前的值结果与0相等,则将该条路径加入result最终结果中。问题分析:因为这个二叉树是先找出数组的最大值构建根节点,再构建左子树和右子树的,所以使用的是前序遍历。先左后右便于找到每层的最左侧节点的值。

2025-04-18 10:07:03 399

原创 LeetCode刷题——二叉树3

至此根节点的左子树的路径已找到,同样的思路找到右子树的路径。时间复杂度O(N).做这道题的时候犯了一个错误,把sb.append(paths.get(i))写成了sb.append(paths[i]),编译的时候报错才想起paths是List类型的不是数组类型的。题目分析:通过中间节点判断该节点是否存在左叶子(即左孩子是叶子结点),然后使用递归的方法,向遍历左子树,再遍历右子树找到所有左叶子节点。题目分析:因为记录的是二叉树的所有路径,所以需要从根节点一点一点搜寻,使用的是前序遍历。时间复杂度O(N).

2025-04-11 09:42:36 393

原创 LeetCode刷题——二叉树2

题目分析:这道题其实就是二叉树层序遍历的衍生题,完全可以按照二叉树层序遍历的做法进行解答,使用队列辅助,用队列的一进一出先进先出来模拟对二叉树的每一层进行遍历。时间复杂度O(N),一开始把最大值max初始化为0,但是有一个测试用例中出现了二叉树中存在负数元素,所以把max初始化为Integer.MIN_VALUE。题目分析:这道题我采用递归的方法解决。递归的三要素:参数和返回值,终止条件,单层递归。题目分析:只要翻转每个节点的左右孩子即可达到翻转整个二叉树的目的,使用前序遍历的方法,采用递归的策略。

2025-04-07 09:51:37 573

原创 LeetCode刷题——二叉树1

二叉树是一种基础的数据结构。二叉树在内存中的存储方式有顺序存储和链式存储,顺序存储是用数组,链式存储使用指针。二叉树的主要分为满二叉树和完全二叉树,满二叉树是指只含有度为0和度为2的节点且度为0的节点都处于同一层,完全二叉树是指除了最底层外其余各层均填满且最底层的节点集中在最左边。Java中定义二叉树的代码如下int val;

2025-04-03 09:42:55 344

原创 LeetCode刷题——队列

1.队列是一种线性数据结构,它遵循“先进先出(FIFO)”的原则,即先入队列的元素先出队列。类似于现实生活中的排队一样,谁先排队谁先办事。2.队列的基本操作与栈的基本操作类似,包括入队,出队,查看队首元素,判断队列是否为空。入队就是在队列的尾部新添一个元素,出队就是在队列的首部弹出一个元素,查看队首元素就是只返回队首元素的值而不把元素从队列中删除。

2025-03-31 10:55:38 569

原创 LeetCode刷题——栈

1.栈是一种后入先出(LIFO)的数据结构,最后入栈的元素最先出栈2.栈的基本操作包括入栈(push),出栈(pop),返回栈顶元素(peek),判断栈是否为空(isEmpty)。入栈(push)操作就是元素添加到栈顶,出栈(pop)操作就是将栈顶元素移出栈,返回栈顶元素(peek)只会返回栈顶元素的值并不会将栈顶元素移出栈。

2025-03-28 10:38:55 711 1

空空如也

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

TA关注的人

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