自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 AcWing 849. Dijkstra求最短路 I

给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,所有边权均为正值。请你求出 11 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 −1。

2024-07-08 23:11:50 91

原创 844. 走迷宫

给定一个 n×m 的二维整数数组,用来表示一个迷宫,数组中只包含 0或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁。最初,有一个人位于左上角 (1,1) 处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。请问,该人从左上角移动至右下角 (n,m)处,至少需要移动多少次。数据保证 (1,1) 处和 (n,m)处的数字为 0,且一定至少存在一条通路。

2024-07-04 20:54:47 276

原创 843. n-皇后问题

n−皇后问题是指将 n个皇后放在 n×n 的国际象棋棋盘上,使得皇后不能相互攻击到,即任意两个皇后都不能处于同一行、同一列或同一斜线上。现在给定整数 n,请你输出所有的满足条件的棋子摆法。

2024-07-04 20:50:37 202

原创 842. 排列数字

给定一个整数 n,将数字 1∼n排成一排,将会有很多种排列方法。现在,请你按照字典序将所有的排列方法输出。

2024-07-04 20:46:24 95

原创 AcWing 838. 堆排序

输入一个长度为 n的整数数列,从小到大输出前 m小的数。

2024-07-04 15:35:02 130

原创 831. KMP字符串

给定一个字符串 S,以及一个模式串 P,所有字符串中只包含大小写英文字母以及阿拉伯数字。模式串 P在字符串 S 中多次作为子串出现。求出模式串 P 在字符串 S 中所有出现的位置的起始下标。

2024-07-02 22:46:46 134

原创 829. 模拟队列

push xpopemptyquery现在要对队列进行 M个操作,其中的每个操作 33 和操作 44 都要输出相应的结果。

2024-06-29 21:10:25 93

原创 AcWing 828. 模拟栈

push xpopemptyquery现在要对栈进行 M个操作,其中的每个操作 33 和操作 44 都要输出相应的结果。

2024-06-29 20:44:31 157

原创 827.双链表

现在要对该链表进行 M次操作,进行完所有操作后,从左到右输出整个链表。:题目中第 k个插入的数并不是指当前链表的第 k个数。例如操作过程中一共插入了 n个数,则按照插入的时间顺序,这 n个数依次为:第 1 个插入的数,第 2个插入的数,…第 n个插入的数。

2024-06-29 20:11:31 120

原创 数据结构:单链表

现在要对该链表进行 M 次操作,进行完所有操作后,从头到尾输出整个链表。:题目中第 k个插入的数并不是指当前链表的第 k 个数。例如操作过程中一共插入了 n 个数,则按照插入的时间顺序,这 n个数依次为:第 1 个插入的数,第 2个插入的数,…第 n个插入的数。

2024-06-28 12:24:56 171

原创 1.4 两数相加和无重复字符的最长子串

map.count也可以用。2.纯用脑分析,没啥技巧。

2024-01-04 20:25:02 359

原创 1.3 LeetCode

1.重温两数之和,使用unordered_map实现哈希,map(key,value);或者 map[i]=j;于是我让,数组的值为key,从前往后找,找不到就存到map里,这样使用的前提是假设只有一个有效答案,否则后来的相同的值的键会覆盖之前的键。auto it(第二个值的迭代器)=map.find(key);= map.end()){找到了}

2024-01-03 12:13:20 329

原创 438.找到字符串中所有字母异位词

时间复杂度:O(n+m+Σ),其中 n 为字符串 s 的长度,m 为字符串 p 的长度,其中Σ 为所有可能的字符数。需要 O(n−m) 来滑动窗口并判断窗口内每种字母的数量是否与字符串 p 中每种字母的数量相同,每次判断需要 O(1)。时间复杂度:O(m+(n−m)×Σ),其中 n 为字符串 s 的长度,m 为字符串 p 的长度,Σ 为所有可能的字符数。在方法一的基础上,我们不再分别统计滑动窗口和字符串 p 中每种字母的数量,而是统计滑动窗口和字符串 p 中每种字母数量的差;空间复杂度:O(Σ)。

2023-07-25 21:05:17 147

原创 3.无重复字符的最长子串

避免无用的遍历,直接找到开始点,做的比较次数多了些。

2023-07-14 20:44:08 123

原创 42.接雨水

时间复杂度:O(n),其中 n 是数组 height 的长度。给定一个长度为 n 的整数数组 height。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i])。空间复杂度:O(n),其中 n 是数组 height 的长度。解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。时间复杂度:O(n),其中 n 是数组 height 的长度。空间复杂度:O(n),其中 n是数组 height 的长度。输入:[1,8,6,2,5,4,8,3,7]

2023-07-13 21:22:24 121

原创 15.三数之和

我们忽略存储答案的空间,额外的排序的空间复杂度为 O(logN)。= k ,同时还满足 nums[i] + nums[j] + nums[k] == 0。给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]]不同的三元组是 [-1,0,1] 和 [-1,-1,2]。输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]输入:nums = [0,1,1]输入:nums = [0,0,0]输出:[[0,0,0]]

2023-07-12 20:47:24 50

原创 11.盛最多水的容器

有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i])。解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。链接:https://leetcode.cn/problems/container-with-most-water。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。本质上,将高的保留,换矮的,因为可能换的时候换到更高的。输入:[1,8,6,2,5,4,8,3,7]输入:height = [1,1]说明:你不能倾斜容器。

2023-07-12 20:14:28 25

原创 283.移动零

感觉时间好像长了,呜呜呜, ii= nums.erase(ii);这样清除完向前走一步,如果等于零就不用++了,防止越界出现问题。给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。跟快速排序的想法差不多,left一直找零,right找到第一个不是零的数交换就行,特别快。链接:https://leetcode.cn/problems/move-zeroes。输入: nums = [0,1,0,3,12]输出: [1,3,12,0,0]输入: nums = [0]

2023-07-11 19:49:37 28

原创 49.字母异位词分组

时间复杂度:O(nklogk),其中 n是strs 中的字符串的数量,k是 strs 中的字符串的的最大长度。需要遍历 n 个字符串,对于每个字符串,需要 O(klogk) 的时间进行排序以及 O(1) 的时间更新哈希表,因此总时间复杂度是 O(nklogk)。输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]输出: [["bat"],["nat","tan"],["ate","eat","tea"]]map.find(key)//返回的是迭代器。

2023-07-11 18:04:22 29

原创 144.二叉树的前序遍历

链接:https://leetcode.cn/problems/binary-tree-preorder-traversal。给你二叉树的根节点 root ,返回它节点值的 前序 遍历。3.Morris遍历,能将空间复杂度降到O(1),本质上。输入:root = [1,null,2,3]输入:root = [1,null,2]树中节点数目在范围 [0, 100] 内。输入:root = [1,2]来源:力扣(LeetCode)输入:root = [1]输入:root = []输出:[1,2,3]

2023-07-10 20:37:47 21

原创 133.克隆图

空间复杂度:O(N)。存储克隆节点和原节点的哈希表需要 O(N)的空间,递归调用栈需要 O(H) 的空间,其中 H 是图的深度,经过放缩可以得到 O(H) = O(N),因此总体空间复杂度为 O(N)。由于图是无向的,如果节点 p 是节点 q 的邻居,那么节点 q 也必须是节点 p 的邻居。图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node])。输入:adjList = [[2,4],[1,3],[2,4],[1,3]]输出:[[2,4],[1,3],[2,4],[1,3]]

2023-07-08 20:48:04 28

原创 LeetCode 129.求根节点到叶节点数字之和

给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。例如,从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123。从根到叶子节点路径 4->9->5 代表数字 495。从根到叶子节点路径 4->9->1 代表数字 491。计算从根节点到叶节点生成的 所有数字之和。从根到叶子节点路径 1->2 代表数字 12。从根到叶子节点路径 1->3 代表数字 13。从根到叶子节点路径 4->0 代表数字 40。输入:root = [4,9,0,5,1]

2023-04-24 20:42:46 81

原创 LeetCode 124.二叉树的最大路径和

二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。该路径 至少包含一个 节点,且不一定经过根节点。解释:最优路径是 15 -> 20 -> 7 ,路径和为 15 + 20 + 7 = 42。解释:最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6。输入:root = [-10,9,20,null,null,15,7]给你一个二叉树的根节点 root ,返回其 最大路径和。输入:root = [1,2,3]路径和 是路径中各节点值的总和。

2023-04-24 20:07:40 50

原创 LeetCode 117.填充每个节点的下一个右侧结点指针(2)

解释:给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。序列化输出按层序遍历顺序(由 next 指针连接),'#' 表示每层的末尾。填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。使用递归解题也符合要求,本题中递归程序的隐式栈空间不计入额外空间复杂度。输入:root = [1,2,3,4,5,null,7]输出:[1,#,2,3,#,4,5,7,#]

2023-04-24 16:21:09 35

原创 LeetCode 116.填充每一个节点的下一个右侧结点指针

解释:给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。序列化的输出按层序遍历排列,同一层节点由 next 指针连接,'#' 标志着每一层的结束。填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。输入:root = [1,2,3,4,5,6,7]输出:[1,#,2,3,#,4,5,6,7,#]

2023-04-17 22:26:40 44

原创 LeetCode 114.二叉树展开为列表

2.可以发现展开的顺序其实就是二叉树的先序遍历。输出:[1,null,2,null,3,null,4,null,5,null,6]3.考虑新的右子树的根节点,一直重复上边的过程,直到新的右子树为 null。输入:root = [1,2,5,3,4,null,6]//将原来的右子树接到左子树的最右边节点。2.将原来的右子树接到左子树的最右边节点。//将原来的右子树接到左子树的最右边节点。//将 2 的左子树插入到右子树的地方。//将 1 的左子树插入到右子树的地方。1.将左子树插入到右子树的地方。

2023-04-16 20:33:30 57

原创 LeetCode 113.路径总和 II

给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22。输入:root = [1,2,3], targetSum = 5。输入:root = [1,2], targetSum = 0。输出:[[5,4,11,2],[5,8,4,5]]树中节点总数在范围 [0, 5000] 内。

2023-04-15 20:02:34 32

原创 LeetCode 112.路径总和

判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum。1.自己写的:自顶向下,要保存自顶向下的val值,他原先函数的参数表是bool hasPathSum(TreeNode* root, int targetSum)输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22。解释:由于树是空的,所以不存在根节点到叶子节点的路径。不存在 sum = 5 的根节点到叶子节点的路径。

2023-04-14 17:00:48 39

原创 111.二叉树的最小深度

在使用这些容器的过程中,我们会大量用到的操作就是插入操作,比如vector的push_back,map的insert,set的insert。这些插入操作会涉及到两次构造,首先是对象的初始化构造,接着在插入的时候会复制一次,会触发拷贝构造。但是很多时候我们并不需要两次构造带来效率的浪费,如果可以在插入的时候直接构造,就只需要构造一次就够了。输入:root = [2,null,3,null,4,null,5,null,6]输入:root = [3,9,20,null,null,15,7]

2023-04-14 16:11:30 79

原创 LeetCode 110.平衡二叉树

有一个自顶向下的递归就是算出几乎每个点的高度然后比,这个确实抽象,且时间复杂度是O(n^2)。第二个就是自底向上,第一次直接想出来最好的办法,源于上一个题试求二叉树深度。输入:root = [1,2,2,3,3,null,null,4,4]输入:root = [3,9,20,null,null,15,7]一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。给定一个二叉树,判断它是否是高度平衡的二叉树。树中的节点数在范围 [0, 5000] 内。输入:root = [ ]时间复杂度:O(n)

2023-04-13 22:16:28 30

原创 Leetcode 104.二叉树的最大深度

给定二叉树 [3,9,20,null,null,15,7],1.递归:永远写不出来这么简洁的递归,写之前一定要多想!二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。正常学习嘞,明天要写概率论了。2.队列bfs,一层一层搜感觉好巧妙啊!说明: 叶子节点是指没有子节点的节点。给定一个二叉树,找出其最大深度。来源:力扣(LeetCode)返回它的最大深度 3。

2023-04-11 22:34:50 69

原创 128.最长连续序列

c++的STL还是不熟啊,还得练啊,java的也得熟悉熟悉了,明天蓝桥杯,感觉,额,其实没咋特别准备,就是嗯,正如我女朋友所说,激励自己学会一些东西才重要,开始刷LeetCode了吧,也算一个收获吧,顺其自然咩!1.用set确实巧妙,一开始想排序,但排序就nlogn咧,set去重,底层是哈希,O(1),后面又通过一个小判定使得每个节点只遍历一遍,太巧妙,据说这还是字节的面试题,不错不错!输入:nums = [0,3,7,2,5,8,4,6,0,1]输入:nums = [100,4,200,1,3,2]

2023-04-07 22:23:55 94

原创 LeetCode 101.对称二叉树

2.迭代,本来想用双端队列但确实有点蠢了,主要是没体会到a点的左儿子与b儿子的右点比较这个核心,想的太少啊!商业转载请联系官方授权,非商业转载请注明出处。输入:root = [1,2,2,null,3,null,3]给你一个二叉树的根节点 root , 检查它是否轴对称。输入:root = [1,2,2,3,4,4,3]进阶:你可以运用递归和迭代两种方法解决这个问题吗?1.递归,本来想用中序遍历后来卡了四个点发现不行。树中节点数目在范围 [1, 1000] 内。来源:力扣(LeetCode)

2023-04-06 22:24:46 47

原创 leetcode1.两数之和

1.类似的题想降时间复杂度肯定是先排序在搜索,但是源于排序不太熟练,咳咳,但后来看官方题解居然是hashmap降时间复杂度,果然是我天真了,先来个暴力的,这题写三个版本吧。解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。输入:nums = [2,7,11,15], target = 9。进阶:你可以想出一个时间复杂度小于 O(n^2) 的算法吗?输入:nums = [3,2,4], target = 6。输入:nums = [3,3], target = 6。

2023-04-04 23:32:32 29

原创 蓝桥杯——路径之谜

可以横向或纵向移动,但不能斜着走,也不能跳跃。有时是可以的,比如上图中的例子。为了方便表示,我们约定每个小格子用一个数字代表,从西北角开始编号: 0,1,2,3 ⋯。本题的要求就是已知箭靶数字,求骑士的行走路径(测试数据保证路径唯一)第一行一个整数 N (0≤N≤20),表示地面有N×N 个方格。第二行 N 个整数,空格分开,表示北边的箭靶上的数字(自西向东)第三行 N 个整数,空格分开,表示西边的箭靶上的数字(自北向南)小明冒充 X 星球的骑士,进入了一个奇怪的城堡。输出一行若干个整数,表示骑士路径。

2023-04-04 10:47:42 126

原创 100.相同的树

1.太蠢了,这个方法,中途想到更好的,结果想着先把这个弄完,就是利用中序+先序/后序,能确定一棵树,最后剩几个点改的我面向结果编程,改了很多不准的小地方。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。2.直接看结点就完了,根左右呗,先判断结点,再判断左右子树。,编写一个函数来检验这两棵树是否相同。给你两棵二叉树的根节点。

2023-04-02 21:18:36 40

原创 99.恢复二叉搜索树

其实整个过程我们就多做一步:将当前节点左子树中最右边的节点指向它,这样在左子树遍历完成后我们通过这个指向走回了 x,且能再通过这个知晓我们已经遍历完成了左子树,而不用再通过栈来维护,省去了栈的空间复杂度。如果predecessor 的右孩子不为空,则此时其右孩子指向 x,说明我们已经遍历完 x 的左子树,我们将 predecessor 的右孩子置空,然后访问 x 的右孩子,即 x=x.right。如果predecessor 的右孩子为空,则将其右孩子指向 x,然后访问 x的左孩子,即 x=x.left。

2023-04-02 19:18:58 41

原创 蓝桥杯青蛙过河

不过, 每块石头有一个高度, 每次小青蛙从一块石头起跳, 这块石头的高度就 会下降 1 , 当石头的高度下降到 0 时小青蛙不能再跳到这块石头上(某次跳跃 后使石头高度下降到 0 是允许的)。这题一开始没弄出来,一点思路没有,是我做题太少了,有点懵懵的,后来看了题解才知道是二分查找,吐血,以为二分查找思路是很简单的,但其实判断什么时候二分的思路还是蛮困难的,呜呜呜,继续努力吧。输入的第一行包含两个整数 n, x 分别表示河的宽度和小青蛙需要去学校 的天数。小青蛙住在一条河边, 它想到河对岸的学校去学习。

2023-04-02 15:19:56 115

原创 98. 验证二叉搜索树

根节点的值是 5 ,但是右子节点的值是 4。所有左子树和右子树自身必须也是二叉搜索树。,判断其是否是一个有效的二叉搜索树。来源:力扣(LeetCode)给你一个二叉树的根节点。

2023-04-01 00:00:05 24

原创 Leetcode 94.二叉树的中序遍历

利用栈走中序遍历先存左儿子,再使用top()找其右节点,再重复中序遍历存左儿子。给定一个二叉树的根节点 root ,返回 它的 中序 遍历。给定一个二叉树的根节点 root ,返回 它的 中序 遍历。进阶: 递归算法很简单,你可以通过迭代算法完成吗?输入:root = [1,null,2,3]1.最简单的递归:左中右罢了,利用容器存储值。从今天开始,一天要做几道数据结构和算法咧。树中节点数目在范围 [0, 100] 内。输入:root = [1]输入:root = []输出:[1,3,2]

2023-03-31 23:35:12 43

空空如也

空空如也

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

TA关注的人

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