自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【更新中】Leetcode中遇到的最短路径算法

因为本题的节点是从1到n,所以最后把dis数组中的第一个忽略掉(dis[1:])然后就是经典的dijkstra最短路径算法,套用模板即可。

2024-03-26 10:57:58 253 1

原创 【更新中】记录一下最近遇到的几个二叉树的题型(附好用的遍历模板)

【代码】记录一下最近遇到的几个二叉树的题型(附好用的遍历模板)

2024-02-15 18:13:13 186

原创 LCR 022. 环形链表 II

给定一个链表,返回链表开始入环的第一个节点。从链表的头节点开始沿着。指针进入环的第一个节点为环的入口节点。如果链表无环,则返回。来表示链表尾连接到链表中的位置(索引从 0 开始)。链表中有一个环,其尾部连接到第二个节点。链表中有一个环,其尾部连接到第一个节点。为了表示给定链表中的环,我们使用整数。分享两个判断链表中环的位置的方法。返回索引为 1 的链表节点。返回索引为 0 的链表节点。,则在该链表中没有环。不允许修改给定的链表。

2024-01-04 17:52:01 395

原创 LeetCode 热题 100——42. 接雨水

上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。个非负整数表示每个宽度为。

2024-01-03 23:32:06 449

原创 LeetCode 热题 100——283. 移动零

考虑使用双指针法,将非零元素向前移动,移动完成之后0元素均在数组末端。这样的算法具有线性时间复杂度 O(n)。因此,给定的算法在最坏情况下具有二次时间复杂度。对于包含大量元素的数组,这可能导致性能问题。时间复杂度为:O(n+(n−1)+(n−2)+…+1)=O(n^2)移动到数组的末尾,同时保持非零元素的相对顺序。,必须在不复制数组的情况下原地对数组进行操作。用冒泡的思想,将前方的0慢慢向后移动,你能尽量减少完成的操作次数吗?,编写一个函数将所有。

2024-01-01 17:49:23 507

原创 LeetCode 热题 100——49. 字母异位词分组

因为每个字母异位词排序后一定相同,所以可以把字母异位词排序后的结果作为哈希表的key,此处需要注意在使用哈希表对字符串进行分组时,哈希表的键应该是不可变的。Python 中的字符串是不可变的类型,因此可以作为哈希表的键。要将可变类型转换为不可变类型,一种常见的方法是将其转换为元组(tuple)。返回的是一个列表(可变类型),因此不能直接作为哈希表的键。作为键,可以将其转换为元组,然后再作为哈希表的键。将这个排序后的字符列表连接成一个新的字符串 作为键。是由重新排列源单词的所有字母得到的一个新单词。

2023-12-27 23:58:25 384

原创 LeetCode 热题 100——1.两数之和

构建映射关系,很简单,这里只需要注意一点,再for循环中,先判断target-nums[i]是否在字典中,再创建映射,因为题里有要求:数组中同一个元素在答案里不能重复出现。如果没有这个要求,那么就可以先创建映射。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。整数,并返回它们的数组下标。你可以想出一个时间复杂度小于。你可以按任意顺序返回答案。,请你在该数组中找出。

2023-12-26 16:02:30 444

原创 【Leetcode】907. 子数组的最小值之和

最小值为 3,1,2,4,1,1,2,1,1,1,和为 17。的每个(连续)子数组。由于答案可能很大,因此。

2023-11-27 23:23:52 136

原创 Leetcode 【2342. 数位和相等数对的最大和】

(0, 2) ,两个数字的数位和都是 9 ,相加得到 18 + 36 = 54。- (1, 4) ,两个数字的数位和都是 7 ,相加得到 43 + 7 = 50。不存在满足条件的数对,返回 -1。所以可以获得的最大和是 54。这段代码的时间复杂度是O(n)请你找出所有满足条件的下标。

2023-11-18 11:34:50 213

原创 Leetcode 【1334. 阈值距离内邻居最少的城市】

然后,对于每个城市,统计满足条件的邻居城市数目,并选择满足条件城市数目最少的城市。城市 0 和 3 在阈值距离 4 以内都有 2 个邻居城市,但是我们必须返回城市 3,因为它的编号最大。城市 1 -> [城市 0, 城市 2, 城市 3]城市 2 -> [城市 0, 城市 1, 城市 3]城市 4 -> [城市 1, 城市 2, 城市 3]城市 0 -> [城市 1, 城市 2]城市 3 -> [城市 1, 城市 2]城市 2 -> [城市 3, 城市 4]城市 3 -> [城市 2, 城市 4]

2023-11-14 12:47:27 147

原创 Leetcode 【765. 情侣牵手】

合并操作,首先找到两个元素所在集合的根节点,然后根据秩的大小判断如何合并。如果两个根节点的秩相等,就将其中一个根节点连接到另一个根节点上,并更新秩。如果秩不相等,将秩小的根节点连接到秩大的根节点上,不需要更新秩。查找操作,通过递归找到元素的根节点,同时进行路径压缩。最少交换座位的次数,以便每对情侣可以并肩坐在一起。无需交换座位,所有的情侣都已经可以手牵手了。交换可选择任意两人,让他们站起来交换座位。个座位上,想要牵到对方的手。数组表示每个元素的父节点,,以此类推,最后一对是。数组表示每个集合的秩。

2023-11-11 19:41:07 81

原创 Leetcode 【1155. 掷骰子等于目标和的方法数】

得到 7 的和有 6 种方法:1+6 2+5 3+4 4+3 5+2 6+1。中心思想还是dp的那个递归方程,方法二用了缓存来避免重复计算。种方式中)滚动骰子的数量,使正面朝上的数字之和等于。返回的结果必须是对 109 + 7 取模。你扔两个骰子,每个骰子有 6 个面。个一样的骰子,每个骰子上都有。你扔一个有 6 个面的骰子。得到 3 的和只有一种方法。,返回可能的方式(从总共。答案可能很大,你需要对。

2023-10-24 11:06:32 155 1

原创 Leetcode 【373. 查找和最小的 K 对数字】

也可能序列中所有的数对都被返回:[1,3],[2,3],其中第一个元素来自。

2023-10-23 13:13:49 103

原创 Leetcode 【477. 汉明距离总和】

这是因为在这个比特位上,count_ones个数的1与count_zeros个数的0可以组成count_ones * count_zeros个不同的数对,每对数对对应一个汉明距离为1的位。因此,该比特位上的总汉明距离就是count_ones乘以count_zeros。在汉明距离的计算中,对于一个特定的比特位,假设有count_ones个数的该比特位是1,有count_zeros个数的该比特位是0。在二进制表示中,4 表示为 0100 ,14 表示为 1110 ,2表示为 0010。

2023-10-17 17:13:55 128

原创 Leetcode 【260. 只出现一次的数字 III】

最右边的 1 所在的位(也就是最低位的 1),这种技巧常用于获取二进制数中最右边的 1 的位置。,其中恰好有两个元素只出现一次,其余所有元素均出现两次。找出只出现一次的那两个元素。你必须设计并实现线性时间复杂度的算法且仅使用常量额外空间来解决此问题。今天的每日一题比较有意思,而且也学到了新东西,所以记录一下。中最右边的 1 所在的位置,以便区分两个子数组。[5, 3] 也是有效的答案。

2023-10-16 11:48:44 97

原创 Leetcode 【136. 只出现一次的数字】

由于数组中只有一个元素出现一次,剩余元素均出现两次,所以选择异或运算,初始化res=0,出现两次相同的元素进行异或运算会使得res结果仍为0,而出现一次的那个元素会使得res结果等于那个出现一次的元素,返回res即可。,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。

2023-10-14 11:35:35 126

原创 Leetcode 【1488. 避免洪水泛滥】

同时, [-1,-1,1,2,-1,-1] 也是另一个可行的没有洪水的方案。请注意,如果你选择抽干一个装满水的湖泊,它会变成一个空的湖泊。但第三天后,湖泊 1 和 2 都会再次下雨,所以不管我们第三天抽干哪个湖泊的水,另一个湖泊都会发生洪水。第二天后,装满水的湖泊包括 [1,2]。你的国家有无数个湖泊,所有湖泊一开始都是空的。用于找到可以抽水的湖泊的位置,以确保不会发生洪水。第四天后,装满水的湖泊包括 [1,2,3,4]第三天后,装满水的湖泊包括 [1,2,3]第六天后,装满水的湖泊包括 [1,2]。

2023-10-13 15:38:01 110

原创 刷题心得 【2731. 移动机器人】

例如,如果一个机器人位于位置 0 并往右移动,另一个机器人位于位置 2 并往左移动,下一秒,它们都将占据位置 1,并改变方向。例如,如果一个机器人位于位置 0 并往右移动,另一个机器人位于位置 1 并往左移动,下一秒,第一个机器人位于位置 0 并往左行驶,而另一个机器人位于位置 1 并往右移动。1 秒后,机器人的位置为 [-1,-1,1]。现在下标为 1 的机器人开始往左移动,下标为 2 的机器人开始往右移动。下标为 1 和 2 的机器人之间的距离为 abs(-1 - 1) = 2。

2023-10-10 23:25:15 46

原创 leetcode刷题心得 【605. 种花问题】

注:i为什么会赋值为-1,当flowerbed=[0,0,1,0,1],n=1的时候,由于在数组前后各加了一个0,所以数组变为[0,0,0,1,0,1,0],此时就有1个连续的三个零。假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。,能否在不打破种植规则的情况下种入。

2023-10-10 23:18:40 53

转载 【转】将分数转换为二进制

备考信息论,在此记录一下将分数转换为二进制的方法(以1/3为例)我们转换整数部分用的是短除法, 那么类似的, 转换小数用的是乘法. 其基本做法是, 乘以2, 不满1写0, 满1写1并去掉积中的1, 然后积再继续乘2.如1/3:首先, 我们写下0.接着, 1/3 乘以2, 得2/3, 不到1, 因此, 我们接着写下00.0接着, 2/3 乘以2, 得4/3, 超过1, 因此, 接着写下10.014/3去掉1是1/3, 我们发现了循环, 因此, 循环节是01作者:大

2022-04-25 17:29:44 5604

原创 【面试题 04.10. 检查子树】

检查子树。你有两棵非常大的二叉树:T1,有几万个节点;T2,有几万个节点。设计一个算法,判断 T2 是否为 T1 的子树。如果 T1 有这么一个节点 n,其子树与 T2 一模一样,则 T2 为 T1 的子树,也就是说,从节点 n 处把树砍断,得到的树与 T2 完全相同。注意:此题相对书上原题略有改动。示例1:输入:t1 = [1, 2, 3], t2 = [2]输出:true示例2:输入:t1 = [1, null, 2, 4], t2 = [3, 2]输出:false提...

2022-02-23 17:31:21 97

原创 【面试题 04.09. 二叉搜索树序列】

从左向右遍历一个数组,通过不断将其中的元素插入树中可以逐步地生成一棵二叉搜索树。给定一个由不同节点组成的二叉搜索树,输出所有可能生成此树的数组。示例:给定如下二叉树 2 / \ 1 3返回:[ [2,1,3], [2,3,1]]通过次数7,758提交次数16,176来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/bst-sequences-lcci著作权归领扣网络所有...

2022-02-22 19:23:08 252

原创 【面试题 04.08. 首个共同祖先】

设计并实现一个算法,找出二叉树中某两个节点的第一个共同祖先。不得将其他的节点存储在另外的数据结构中。注意:这不一定是二叉搜索树。例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4] 3 / \ 5 1/ \ / \6 2 0 8 / \7 4示例 1:输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出: 3解释: 节点 5 和节点 1 的最近公...

2022-02-21 15:17:51 118

原创 【面试题 04.06. 后继者】

设计一个算法,找出二叉搜索树中指定节点的“下一个”节点(也即中序后继)。如果指定节点没有对应的“下一个”节点,则返回null。示例 1:输入: root = [2,1,3], p = 1 2/ \1 3输出: 2示例 2:输入: root = [5,3,6,2,4,null,null,1], p = 6 5 / \ 3 6 / \ 2 4/ 1输出: null通过次数23,712提交次数40,005来...

2022-02-20 13:29:38 293

原创 【面试题 04.05. 合法二叉搜索树】

实现一个函数,检查一棵二叉树是否为二叉搜索树。示例1:输入: 2 / \ 1 3输出: true示例2:输入: 5 / \ 1 4 / \ 3 6输出: false解释: 输入为: [5,1,4,null,null,3,6]。 根节点的值为 5 ,但是其右子节点值为 4 。通过次数28,898提交次数81,854来源:力扣(LeetCode)链接:https://leetcode-cn.com/probl...

2022-02-19 22:26:39 217

原创 【面试题 04.04. 检查平衡性】

实现一个函数,检查二叉树是否平衡。在这个问题中,平衡树的定义如下:任意一个节点,其两棵子树的高度差不超过 1。示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4] 1 / \ 2 2 / \ 3 3/ \4 4返回false 。通过次数36,258...

2022-02-18 23:35:25 84

原创 【面试题 04.03. 特定深度节点链表】

给定一棵二叉树,设计一个算法,创建含有某一深度上所有节点的链表(比如,若一棵树的深度为 D,则会创建出 D 个链表)。返回一个包含所有深度的链表的数组。示例:输入:[1,2,3,4,5,null,7,8] 1 / \ 2 3 / \ \ 4 5 7 / 8输出:[[1],[2,3],[4,5,7],[8]]通过次数26,816提交次数33,297来源:力扣(LeetCode)链接:ht...

2022-02-18 00:02:34 78

原创 【面试题 04.02. 最小高度树】

给定一个有序整数数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉搜索树。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5通过次数38,089提交次数48,270来源:力扣(LeetCode)链接:https://leetcode-cn...

2022-02-16 19:10:10 77

原创 【面试题 04.01. 节点间通路】

节点间通路。给定有向图,设计一个算法,找出两个节点之间是否存在一条路径。示例1:输入:n = 3, graph = [[0, 1], [0, 2], [1, 2], [1, 2]], start = 0, target = 2输出:true示例2:输入:n = 5, graph = [[0, 1], [0, 2], [0, 4], [0, 4], [0, 1], [1, 3], [1, 4], [1, 3], [2, 3], [3, 4]], start = 0, target = 4...

2022-02-15 20:15:44 247

原创 【面试题 03.06. 动物收容所】

动物收容所。有家动物收容所只收容狗与猫,且严格遵守“先进先出”的原则。在收养该收容所的动物时,收养人只能收养所有动物中“最老”(由其进入收容所的时间长短而定)的动物,或者可以挑选猫或狗(同时必须收养此类动物中“最老”的)。换言之,收养人不能自由挑选想收养的对象。请创建适用于这个系统的数据结构,实现各种操作方法,比如enqueue、dequeueAny、dequeueDog和dequeueCat。允许使用Java内置的LinkedList数据结构。enqueue方法有一个animal参数,animal[0

2022-02-15 18:13:41 95

原创 【面试题 03.05. 栈排序】

栈排序。 编写程序,对栈进行排序使最小元素位于栈顶。最多只能使用一个其他的临时栈存放数据,但不得将元素复制到别的数据结构(如数组)中。该栈支持如下操作:push、pop、peek 和 isEmpty。当栈为空时,peek返回 -1。示例1:输入:["SortedStack", "push", "push", "peek", "pop", "peek"][[], [1], [2], [], [], []]输出:[null,null,null,1,null,2]示例2:输入:[...

2022-02-13 14:09:38 76

原创 【面试题 03.04. 化栈为队】

实现一个MyQueue类,该类用两个栈来实现一个队列。示例:MyQueue queue = new MyQueue();queue.push(1);queue.push(2);queue.peek(); // 返回 1queue.pop(); // 返回 1queue.empty(); // 返回 false说明:你只能使用标准的栈操作 -- 也就是只有 push to top, peek/pop from top, size 和 is empty 操作是合法的。你所使..

2022-02-12 12:48:18 74

原创 【面试题 03.03. 堆盘子】

堆盘子。设想有一堆盘子,堆太高可能会倒下来。因此,在现实生活中,盘子堆到一定高度时,我们就会另外堆一堆盘子。请实现数据结构SetOfStacks,模拟这种行为。SetOfStacks应该由多个栈组成,并且在前一个栈填满时新建一个栈。此外,SetOfStacks.push()和SetOfStacks.pop()应该与普通栈的操作方法相同(也就是说,pop()返回的值,应该跟只有一个栈时的情况一样)。 进阶:实现一个popAt(int index)方法,根据指定的子栈,执行pop操作。当某个栈为空时,应当删

2022-02-11 13:28:49 99

原创 【面试题 03.02. 栈的最小值】

请设计一个栈,除了常规栈支持的pop与push函数以外,还支持min函数,该函数返回栈元素中的最小值。执行push、pop和min操作的时间复杂度必须为O(1)。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.getMin(); --> 返回 -3.minStack.pop();minStack.top(); --&...

2022-02-10 21:30:54 145

原创 【面试题 03.01. 三合一】

三合一。描述如何只用一个数组来实现三个栈。你应该实现push(stackNum, value)、pop(stackNum)、isEmpty(stackNum)、peek(stackNum)方法。stackNum表示栈下标,value表示压入的值。构造函数会传入一个stackSize参数,代表每个栈的大小。示例1:输入:["TripleInOne", "push", "push", "pop", "pop", "pop", "isEmpty"][[1], [0, 1], [0, 2], .

2022-02-09 17:41:46 358

原创 【面试题 02.08. 环路检测】

给定一个链表,如果它是有环链表,实现一个算法返回环路的开头节点。若环不存在,请返回 null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。示例 1:正在上传…重新上传取消输入:head = [3,2,0,-4], pos = 1输出:tail co

2022-02-08 21:30:42 92

原创 【面试题 02.07. 链表相交】

给你两个单链表的头节点headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。图示两个链表在节点 c1 开始相交:题目数据 保证 整个链式结构中不存在环。注意,函数返回结果后,链表必须 保持其原始结构 。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Intersected at '.

2022-02-07 20:43:30 93

原创 【面试题 02.05. 链表求和】

给定两个用链表表示的整数,每个节点包含一个数位。这些数位是反向存放的,也就是个位排在链表首部。编写函数对这两个整数求和,并用链表形式返回结果。示例:输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295输出:2 -> 1 -> 9,即912进阶:思考一下,假设这些数位是正向存放的,又该如何解决呢?示例:输入:(6 -> 1 -> 7) + (2 -> 9 -> 5),即617 + 29

2022-02-06 17:58:17 64

原创 【面试题 02.04. 分割链表】

给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。你不需要保留每个分区中各节点的初始相对位置。示例 1:输入:head = [1,4,3,2,5,2], x = 3输出:[1,2,2,4,3,5]示例 2:输入:head = [2,1], x = 2输出:[1,2]提示:链表中节点的数目在范围 [0, 200] 内-100 <= Node.val <= 100...

2022-02-06 01:11:56 110

原创 【面试题 02.03. 删除中间节点】

若链表中的某个节点,既不是链表头节点,也不是链表尾节点,则称其为该链表的「中间节点」。假定已知链表的某一个中间节点,请实现一种算法,将该节点从链表中删除。例如,传入节点 c(位于单向链表 a->b->c->d->e->f 中),将其删除后,剩余链表为 a->b->d->e->f示例:输入:节点5(位于单向链表4->5->1->9中)输出:不返回任何数据,从链表中删除传入的节点 5,使链表变为4->1...

2022-02-03 20:27:32 83

空空如也

空空如也

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

TA关注的人

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