算法
文章平均质量分 62
你好,此用户已存在
苍山负雪,明烛天南
展开
-
LRU缓存(哈希+双链表)
请你设计并实现一个满足约束的数据结构。实现LRUCachecapacitykey-1keyvaluekey-valuecapacity函数get和put必须以O(1)的平均时间复杂度运行。原创 2024-04-22 17:45:49 · 1090 阅读 · 0 评论 -
最大子数组和(贪心)
请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。连续子数组 [4,-1,2,1] 的和最大,为 6。是数组中的一个连续部分。原创 2024-04-20 19:22:09 · 359 阅读 · 0 评论 -
两两交换链表中的节点
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。本题与翻转链表题目有异曲同工之妙,详情参见。原创 2024-04-19 20:12:35 · 258 阅读 · 0 评论 -
链表排序(归并排序)
【代码】链表排序(归并排序)原创 2024-04-19 19:43:52 · 308 阅读 · 0 评论 -
轮转数组(力扣)
向右轮转 1 步: [99,-1,-100,3]向右轮转 2 步: [3,99,-1,-100],将数组中的元素向右轮转。,因此,我们可以做如下操作。原创 2024-04-17 19:45:34 · 322 阅读 · 0 评论 -
两数相加(链表)
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。的链表,表示两个非负的整数。它们每位数字都是按照。请你将两个数相加,并以相同形式返回一个表示和的链表。的方式存储的,并且每个节点只能存储。原创 2024-04-17 19:18:00 · 242 阅读 · 0 评论 -
相交链表(双指针)
的输入如下(你设计的程序。原创 2024-04-16 11:31:32 · 851 阅读 · 0 评论 -
合并区间(排序+双指针)
以数组intervals表示若干个区间的集合,其中单个区间为。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。原创 2024-04-16 11:14:29 · 507 阅读 · 0 评论 -
盛最多水的容器(双指针)
图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。思路:使用双指针遍历计算面积,并更新最大值。轴共同构成的容器可以容纳最多的水。找出其中的两条线,使得它们与。返回容器可以储存的最大水量。原创 2024-04-09 18:21:40 · 155 阅读 · 0 评论 -
接雨水(双指针)
给定n个非负整数表示每个宽度为1的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。原创 2024-04-09 16:46:52 · 408 阅读 · 0 评论 -
前 K 个高频元素(手写堆排序)
请你返回其中出现频率前。原创 2024-04-08 16:33:12 · 250 阅读 · 0 评论 -
环形链表(快慢指针)
遍历链表每一个节点,并使用哈希表进行标记,判断该节点是否被遍历过,如果被遍历过则说明链表中有换。指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数。来表示链表尾连接到链表中的位置(索引从 0 开始)。如果链表中有某个节点,可以通过连续跟踪。链表中有一个环,其尾部连接到第二个节点。链表中有一个环,其尾部连接到第一个节点。仅仅是为了标识链表的实际情况。,判断链表中是否有环。给你一个链表的头节点。原创 2024-04-06 19:43:17 · 392 阅读 · 0 评论 -
搜索二维矩阵
给你一个满足下述两条属性的m x n给你一个整数target,如果target在矩阵中,返回true;否则,返回false。原创 2024-04-06 11:33:33 · 323 阅读 · 0 评论 -
寻找排序数组中的最小值
已知一个长度为n的数组,预先按照升序排列,经由1到n次后,得到输入数组。例如,原数组47注意,数组的结果为数组。给你一个元素值的数组nums,它原来是一个升序排列的数组,并按上述情形进行了多次旋转。请你找出并返回数组中的。你必须设计一个时间复杂度为O(log n)的算法解决此问题。原创 2024-04-06 10:50:24 · 383 阅读 · 0 评论 -
搜索旋转排序数组
上述判定在具体题目中使用哪个以及如何使用可进一步根据题意分析,但是思想是重要的。直接根据旋转排序数组使用二分法找到答案。,则返回它的下标,否则返回。你必须设计一个时间复杂度为。我们知道,在旋转排序数组中,按升序排列,数组中的值。在预先未知的某个下标。在本题中,我们完全可以。原创 2024-04-06 10:40:37 · 1198 阅读 · 0 评论 -
在排序数组中查找元素的第一个和最后一个位置
请你找出给定目标值在数组中的开始位置和结束位置。给你一个按照非递减顺序排列的整数数组。你必须设计并实现时间复杂度为。如果数组中不存在目标值。使用该算法寻找左边界时。使用该算法寻找左边界时。原创 2024-04-03 23:56:54 · 423 阅读 · 0 评论 -
搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。这是一道经典的二分算法问题,但问题的关键在于,二分写法时的边界处理问题。如果在二分循环过程中的搜索区间是。如果在二分循环过程中的搜索区间是。请必须使用时间复杂度为。原创 2024-04-03 20:27:21 · 389 阅读 · 0 评论 -
全排列II(回溯+去重)
给定一个可包含重复数字的序列。返回所有不重复的全排列。原创 2024-04-02 11:27:26 · 196 阅读 · 0 评论 -
括号生成(回溯+剪枝)
而当路径收集过程中path.size(),也就是最终的结果等于2n时,应该进行收集。代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且。剪去递归过程中不符合题意的条件,可以看出以下情况,应当进行剪枝。原创 2024-03-29 19:39:09 · 537 阅读 · 0 评论 -
复原IP地址
用以表示一个 IP 地址,返回所有可能的。正好由四个整数(每个整数位于。之间组成,且不能含有前导。给定一个只包含数字的字符串。,这些地址可以通过在。原创 2024-03-28 11:10:07 · 257 阅读 · 0 评论 -
分割回文串
分割成一些子串,使每个子串都是。所有可能的分割方案。原创 2024-03-28 09:25:34 · 211 阅读 · 0 评论 -
电话号码的字母组合
如果使用暴力搜索,那么题目中给出的digits有几个数字,就有有几层for循环,因此不适宜使用暴力求解。而在回溯算法中,递归的深度就是for循环的层数,因此可以使用回溯法解决本题,其中。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。的字符串,返回所有它能表示的字母组合。原创 2024-03-27 19:06:13 · 391 阅读 · 0 评论 -
组合总和(回溯)
2 和 3 可以形成一组候选,2 + 2 + 3 = 7。注意 2 可以使用多次。如果至少一个数字的被选数量不同,则两种组合是不同的。7 也是一个候选, 7 = 7。本题解法类似于组合总和III,详解。,并以列表形式返回。中可以使数字和为目标数。对于给定的输入,保证和为。原创 2024-03-26 08:29:06 · 427 阅读 · 0 评论 -
找出比给定数字大的最小数
给定一个数字,找出比这个数字大的最小数,其中这个数字是由给定数字的数位组成的;若找不到,则返回-1。如给定数字123,则由数字123的所有数位可组成数字123、132、213、231、321、312,这些数字里比给定数字123大的最小数是132。原创 2024-03-25 16:33:29 · 260 阅读 · 0 评论 -
二叉树的所有路径
返回所有从根节点到叶子节点的路径。版本二的代码拆开后等价于以下代码。给你一个二叉树的根节点。是指没有子节点的节点。原创 2023-12-12 11:16:23 · 393 阅读 · 0 评论 -
对称二叉树(递归与非递归解法)
非递归解法可使用队列将每层的节点保存下来之后进行判断相同即可,保存的时候是由外向内进行保存,即先保存外侧节点,再保存内侧节点。使用递归法遍历时的各层次如上图所示。请设计一个函数判断一棵二叉树是否。从图中可看出最后一层的节点不对称。从图中可看出树是轴对称的。原创 2023-12-10 11:43:22 · 420 阅读 · 0 评论 -
翻转二叉树(图解、前序遍历、递归与非递归)
给定一棵二叉树的根节点root,请左右翻转这棵二叉树,并返回其根节点。[0, 100]原创 2023-12-10 10:58:04 · 397 阅读 · 0 评论 -
二叉树的层次遍历
(即逐层地,从左到右访问所有节点)。原创 2023-12-08 12:26:00 · 470 阅读 · 0 评论 -
二叉树的前、中、后序遍历(递归与非递归)
故而使用一个栈保存临时元素时,需要。此处借用了一个技巧,我们知道。由于前序遍历的顺序是,原创 2023-12-08 11:53:23 · 397 阅读 · 0 评论 -
N皇后(回溯法)
参考:51. N 皇后 - 力扣(LeetCode)原创 2023-12-06 23:57:47 · 834 阅读 · 0 评论 -
递增子序列(回溯)
给你一个整数数组nums,找出并返回所有该数组中不同的递增子序列,递增子序列中。你可以按返回答案。数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。原创 2023-12-05 10:50:15 · 1090 阅读 · 0 评论 -
全排列(回溯)
本题与组合问题很类似,依旧使用for循环控制每层遍历,使用递归控制每个树枝上的深层遍历。在组合问题中,笔者详细说明了回溯算法的图解表示,详情可见。在本题中,使用回溯算法与组合问题的对比,只有两个不同点。是的,这其实就是最原始的DFS算法应用。给定一个不含重复数字的整数数组。原创 2023-12-04 15:47:13 · 403 阅读 · 0 评论 -
组合总和II(回溯、去重)
中的每个数字在每个组合中只能使用。给定一个候选人编号的集合。解集不能包含重复的组合。中所有可以使数字和为。原创 2023-12-03 00:09:05 · 606 阅读 · 0 评论 -
组合总和III(回溯)
找出所有相加之和为n的k返回所有可能的有效组合的列表。该列表不能包含相同的组合两次,组合可以以任何顺序返回。原创 2023-12-01 19:52:37 · 437 阅读 · 0 评论 -
子集(回溯、图解)
返回该数组所有可能的子集(幂集)。使用回溯算法,回溯的本质在于。原创 2023-12-01 11:10:26 · 413 阅读 · 0 评论 -
组合(回溯+剪枝、图解)
在上述代码中,我们用for循环用来横向遍历,递归的过程是纵向遍历。同时用startIndex控制每层遍历的起始位置,每往深层下降一层就用path保存取到的节点i,当满足终止条件return返回到上一层前要进行回溯,撤销处理的结点。那么终止条件是什么呢?在上述暴力算法中,题目中k等于多少,我们就要嵌套多少个for循环,显然这样写代码是不合理的,而在回溯算法中,我们。原创 2023-11-30 23:53:08 · 616 阅读 · 0 评论 -
验证回文串(双指针)
"amanaplanacanalpanama" 是回文串。,只考虑字母和数字字符,可以忽略字母的大小写。解释:"raceacar" 不是回文串。本题中,将空字符串定义为有效的。原创 2023-11-29 09:09:04 · 403 阅读 · 0 评论 -
合并区间(排序、贪心)
如图所示,如果后边区间的开始端点位置小于等于前边区间结束端点的位置,就说明这两个区间是重叠的,即。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].定义一个结果数组res,将第一个区间放入到res中,遍历区间数组。区间 [1,4] 和 [4,5] 可被视为重叠区间。表示若干个区间的集合,其中单个区间为。原创 2023-11-21 11:15:38 · 87 阅读 · 0 评论 -
小数背包问题
有一个,背包容量是C,有N(1原创 2023-11-18 10:51:48 · 303 阅读 · 0 评论 -
分发糖果(贪心算法)
n个孩子站成一排。给你一个整数数组ratings表示每个孩子的评分。1请你给每个孩子分发糖果,计算并返回需要准备的。原创 2023-11-17 21:22:48 · 564 阅读 · 0 评论