![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode解题目录
文章平均质量分 52
von Libniz
这个作者很懒,什么都没留下…
展开
-
Leetcode 23. 合并K个升序链表
题目链接:https://leetcode.cn/problems/merge-k-sorted-lists/给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。这题显然是数组k路归并的扩展,而数组k路归并存在三种解法(假设k路数组的所有元素数为n):(1)k路数组拷贝至同一数组,再统一排序(2)k路数组进行k次归并(3)使用最小堆,依次从k个数组中找到最小值,重复n次而这题把数组换成了链表,那使用第三种方法是比较合适的。...原创 2022-07-03 11:33:16 · 90 阅读 · 0 评论 -
Leetcode 146. LRU 缓存
请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。实现 LRUCache 类:LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。void put(int key, int value) 如果关键字 key 已经存在,则变更其数据值 value ;如果不存在,则向缓存中插入该组 key-value 。如果插入操作导致关键原创 2022-07-01 23:36:11 · 190 阅读 · 0 评论 -
Lintcode 130 · 堆化
链接:https://www.lintcode.com/problem/130/给出一个整数数组,把它变成一个最小堆数组,这称为堆化操作。对于堆数组A,A[0]是堆的根,并对于每个A[i],A [i * 2 + 1]是A[i]的左儿子并且A[i * 2 + 2]是A[i]的右儿子。题目意思很简单,批量建堆,如果遍历数组,依次做堆的添加操作,那么时间复杂度是O(nlogn),完全可以进行全排序了。所以在实际中,常常采用自下而上的下滤,来进行批量建堆,时间复杂度是O(n)。思路也很简单,自下而上,先做到左右子树原创 2022-06-23 14:50:11 · 110 阅读 · 0 评论 -
Leetcode 78. 子集 and 90. 子集 II
给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。排列问题,一般都可以用深搜做,当然广搜也可以,这里给出三种解法。构建一棵二叉树,每层判断是否要放入nums[i],由根节点到叶子节点的路径构成一个子集。深搜2每层从剩下的可选数字中选择一个放入,从第0层往下,第i层代表含有i个元素的子集,所以每层要保存到答案中。为了避免重复,先对数组排序,只选择更大的元素放入(保证升序)。动态规划由可选的数字各不相同原创 2022-06-22 15:58:15 · 1584 阅读 · 0 评论 -
Leetcode 450. 删除二叉搜索树中的节点
链接:https://leetcode.cn/problems/delete-node-in-a-bst/二叉搜索树的增删改查都是必会的内容,但是删除相对于其他操作较难一点,可以通过这道题来进行练习。给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。迭代解法迭代解法基本思路与上相同,就是要多分类讨论删除的节点是不是根节点。...原创 2022-06-07 17:57:45 · 100 阅读 · 0 评论 -
LeetCode刷题目录
215. 数组中的第K个最大元素(中等)5. 最长回文子串28. 实现 strStr()704. 二分查找(简单)35. 搜索插入位置(简单)34. 在排序数组中查找元素的第一个和最后一个位置(中等)125. 验证回文串(简单)680. 验证回文字符串 Ⅱ(简单)4. 寻找两个正序数组的中位数(困难)144. 二叉树的前序遍历(简单)94. 二叉树的中序遍历(简单)145. 二叉树的后序遍历(简单)102. 二叉树的层序遍历(中等)257. 二叉树的所有路径(简单)剑指 Offer II原创 2022-06-01 09:59:49 · 158 阅读 · 0 评论 -
BFS图遍历:Leetcode 133. 克隆图
目录1.题目描述2.图的BFS遍历3.解法一:BFS边遍历边复制4.解法二:BFS复制所有节点,再复制所有边1.题目描述链接:https://leetcode.cn/problems/clone-graph/class Node: def __init__(self, val = 0, neighbors = None): self.val = val self.neighbors = neighbors if neighbors is not None els原创 2022-05-28 10:39:36 · 200 阅读 · 0 评论 -
必刷?704. 二分查找 以及两种变体
目录题目描述2.非递归二分3.递归二分4.变体1:搜索插入位置4.变体2:在排序数组中查找元素的第一个和最后一个位置二分查找是一个简单但是热门的方法,二分的模板也非常多,这里提供一个简单好记、且不会索引越界的写法,并在此基础上改写得到一些变体,如查找最后一个目标元素,查找第一个大于(或者小于)目标的数。包含的题目链接:704. 二分查找:https://leetcode.cn/problems/binary-search/705. 搜索插入位置:https://leetcode.cn/problem原创 2022-05-27 15:01:42 · 80 阅读 · 0 评论 -
必刷?215. 数组中的第K个最大元素之:快排+归排+快速选择
目录1.题目描述2.快排解法3.归并排序3.快速选择链接:https://leetcode.cn/problems/kth-largest-element-in-an-array/这道题可以用来练习快排、归排、快速选择三种算法,性价比非常高,建议隔天一刷。1.题目描述给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5原创 2022-05-27 14:24:10 · 166 阅读 · 0 评论 -
Leetcode 055. 二叉搜索树迭代器
目录1.题目说明2.题解链接:https://leetcode.cn/problems/kTOapQ/1.题目说明实现一个二叉搜索树迭代器类BSTIterator ,表示一个按中序遍历二叉搜索树(BST)的迭代器:BSTIterator(TreeNode root) 初始化 BSTIterator 类的一个对象。BST 的根节点 root 会作为构造函数的一部分给出。指针应初始化为一个不存在于 BST 中的数字,且该数字小于 BST 中的任何元素。boolean hasNext() 如果向指针右原创 2022-05-27 14:05:02 · 73 阅读 · 0 评论 -
Leetcode .04. 检查平衡性
链接:https://leetcode.cn/problems/check-balance-lcci/实现一个函数,检查二叉树是否平衡。在这个问题中,平衡树的定义如下:任意一个节点,其两棵子树的高度差不超过 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原创 2022-05-27 10:43:41 · 1157 阅读 · 0 评论 -
Leetcode 257. 二叉树的所有路径与变体
目录1.深搜写法12.深搜写法23.分治法链接:https://leetcode.cn/problems/binary-tree-paths/题目描述:给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。叶子节点 是指没有子节点的节点。示例 1:输入:root = [1,2,3,null,5]输出:["1->2->5","1->3"]示例 2:输入:root = [1]输出:["1"]1.深搜写法1用字符串path存储根节点到原创 2022-05-27 10:22:39 · 202 阅读 · 0 评论 -
LeetCode 28. 实现 strStr()
28. 实现 strStr()链接:https://leetcode-cn.com/problems/implement-strstr/实现 strStr() 函数。给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。说明:当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。对于本题而言,当 needle 是空字符串时我们应当返回 0 。这原创 2022-04-13 19:46:36 · 89 阅读 · 0 评论 -
LeetCode 5. 最长回文子串
5. 最长回文子串链接:https://leetcode-cn.com/problems/longest-palindromic-substring/给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案。示例 2:输入:s = "cbbd"输出:"bb"枚举解法时间复杂度 O(n^3)class Solution: def longestPalindrome(self, s: st原创 2022-04-10 22:10:10 · 464 阅读 · 0 评论 -
剑指 Offer 03. 数组中重复的数字的三种解法
https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof/题意找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3 题解一:哈希表法//哈希表法:O(n)时间复杂度 O(n)空间原创 2021-04-12 10:28:29 · 94 阅读 · 0 评论 -
LeetCode110. 平衡二叉树:自顶向下+记忆化+自底向上(超详细的解析!!!!)
题意给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。示例 1:输入:root = [3,9,20,null,null,15,7]输出:true示例 2:输入:root = [1,2,2,3,3,null,null,4,4]输出:false示例 3:输入:root = []输出:true题解解法一:自顶向下这道题希望我们判断一棵树是否是平衡二叉树,即所有节点的左右子树高度差不原创 2021-03-14 21:37:00 · 249 阅读 · 0 评论 -
LeetCode83. 删除排序链表中的重复元素:迭代+递归解法
题意给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->3题解迭代方法由于链表是升序的,所以重复的元素一定相邻着出现,那么判断是否重复,只需要通过比较当前节点是否和上一个节点值相同即可,若相同,则让上一个节点的next指向当前节点的next,来删除当前重复元素;若不相同则无需删除,继续向后迭代。//迭代方原创 2021-03-07 17:45:13 · 187 阅读 · 0 评论 -
LeetCode203. 移除链表元素:常规迭代+头节点+递归(100%+90% 超详细的解法!!!!)
题意删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5原创 2021-03-07 14:52:13 · 249 阅读 · 0 评论 -
LeetCode99. 恢复二叉搜索树:morris遍历100%+99%(17张图超详细的解析!!!!)
https://leetcode-cn.com/problems/recover-binary-search-tree/题意给你二叉搜索树的根节点 root ,该树中的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树。进阶:使用 O(n) 空间复杂度的解法很容易实现。你能想出一个只使用常数空间的解决方案吗?输入:root = [1,3,null,null,2]输出:[3,1,null,null,2]解释:3 不能是 1 左孩子,因为 3 > 1 。交换 1 和 3 使二叉搜索树原创 2021-03-06 21:47:30 · 563 阅读 · 0 评论 -
LeetCode173. 二叉搜索树迭代器(超实用的解法!!!!)
题意实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。调用 next() 将返回二叉搜索树中的下一个最小的数。BSTIterator iterator = new BSTIterator(root);iterator.next(); // 返回 3iterator.next(); // 返回 7iterator.hasNext(); // 返回 trueiterator.next(); // 返回 9iterator.hasNext(); // 返回 tr原创 2021-03-05 20:30:58 · 222 阅读 · 0 评论 -
LeetCode98. 验证二叉搜索树递归与非递归解法(100%+98.4% 超高效的解法!!!!)
题意给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入: 2 / \ 1 3输出: true示例 2:输入: 5 / \ 1 4 / \ 3 6输出: false解释: 输入为: [5,1,4,null,null,3,6]。 根节点的值为 5 ,但原创 2021-03-05 19:00:00 · 241 阅读 · 1 评论 -
LeetCode230. 二叉搜索树中第K小的元素:用时100%+内存99%(java+c++)(超高效的解法!!!!)
https://leetcode-cn.com/problems/kth-smallest-element-in-a-bst/题意给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。输入:root = [3,1,4,null,2], k = 1输出:1输入:root = [5,3,6,2,4,null,null,1], k = 3输出:3提示:树中的节点数为 n 。1 <= k <= n <=原创 2021-03-04 22:35:58 · 187 阅读 · 1 评论 -
235. 二叉搜索树的最近公共祖先:迭代-递归解法详解(超实用的解法!!!!)
题意给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]示例 1:输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8输出: 6 解释: 节原创 2021-03-04 17:45:35 · 713 阅读 · 1 评论 -
LeetCode938. 二叉搜索树的范围和的三种解法:中序+递归+深搜100%+97%(超高效的解法!!!!)
https://leetcode-cn.com/problems/range-sum-of-bst/题意给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和。输入:root = [10,5,15,3,7,null,18], low = 7, high = 15输出:32输入:root = [10,5,15,3,7,13,18,1,null,6], low = 6, high = 10输出:23题解1.中序遍历由于题目中要求求出二叉搜索树中原创 2021-03-04 16:53:44 · 282 阅读 · 3 评论 -
LeetCode530. 二叉搜索树的最小绝对差100%+60%(超简单的写法!!!!)
题意给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。示例:输入: 1 \ 3 / 2输出:1解释:最小绝对差为 1,其中 2 和 1 的差的绝对值为 1(或者 2 和 3)。题解由于是二叉搜索树,最小的绝对值一定在中序遍历相邻节点之间,因此只需记录前节点的值,遍历或者相邻节点值之差的最小值即可。此外,由于所有节点元素值非负,可以给前节点值一个负数初始值,如-1。/** * 中序遍历解法 */class原创 2021-03-03 17:02:30 · 123 阅读 · 2 评论 -
LeetCode701. 二叉搜索树中的插入操作-递归与迭代解法-100%+83%(超高效的解法!!!!)
https://leetcode-cn.com/problems/insert-into-a-binary-search-tree/题意给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。输入:root = [4,2,7,1,3], val = 5输出:[4,2,7,1,3,5]解原创 2021-03-03 12:44:23 · 122 阅读 · 0 评论 -
LeetCode700. 二叉搜索树中的搜索-迭代与递归-java与python代码(超简单的写法!!!!)
https://leetcode-cn.com/problems/search-in-a-binary-search-tree/题意给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回NULL。题解简单题直接做就完事了。递归方法java代码//递归解法class Solution { public TreeNode searchBST(TreeNode root, int val) {原创 2021-03-03 11:51:14 · 104 阅读 · 0 评论 -
LeetCode450. 删除二叉搜索树中的节点-迭代与递归解法100%+84%(含java与c++代码)(超高效的写法!!!!)
https://leetcode-cn.com/problems/delete-node-in-a-bst/题意给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一般来说,删除节点可分为两个步骤:首先找到需要删除的节点;如果找到了,删除它。说明: 要求算法时间复杂度为 O(h),h 为树的高度。举例:题解迭代解法迭代方法通过寻找到待删除节点并记录其父节点,然后根据原创 2021-03-03 10:50:37 · 132 阅读 · 0 评论 -
LeetCode225. 用队列实现栈图解(多图!!超详细的解法!!!!)
题目连接:https://leetcode-cn.com/problems/implement-stack-using-queues/题目描述请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通队列的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,返回 true ;否则,返回原创 2021-02-20 14:06:33 · 190 阅读 · 0 评论 -
LeetCode232. 用栈实现队列图解(多图!!超详细的解法!!!!)
题目连接:232. 用栈实现队列题意请你仅使用两个栈实现先入先出队列。队列应当支持一般队列的支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 falseclass MyQueue { /** Initialize your dat原创 2021-02-19 18:09:05 · 134 阅读 · 0 评论 -
LeetCode206. 反转链表的两种解法图示(多图!!超详细的解法!!!!)
题目链接:https://leetcode-cn.com/problems/reverse-linked-list/题意反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?/** * Definition for singly-linked list. * public class ListNode {原创 2021-02-17 13:27:20 · 207 阅读 · 0 评论 -
LeetCode20. 有效的括号两种思路(超实用的解法!!!!)
题意给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = "()"输出:true示例 2:输入:s = "()[]{}"输出:true示例 3:输入:s = "(]"输出:false示例 4:输入:s = "([)]"输出:false示例 5:输入:s = "{[]}"输出:true题解思路一将所有符合要求原创 2021-02-19 17:28:38 · 92 阅读 · 0 评论 -
LeetCode237. 删除链表中的节点(超实用的解法!!!!)
题目链接:https://leetcode-cn.com/problems/delete-node-in-a-linked-list/题意请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。现有一个链表 – head = [4,5,1,9],它可以表示为:请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。现有一个链表 – head = [4,5,1,9],它可以表示为:示例 1:输入:head原创 2021-02-17 11:45:54 · 143 阅读 · 0 评论 -
LeetCode141. 环形链表图解(超详细的解法!!!!)
题目链接:https://leetcode-cn.com/problems/linked-list-cycle/有环:无环:该题目提供头节点head,让我们判断链表是否有环,可以使用快慢指针的思路。所谓快慢指针,就是让slow和fast两个指针从head开始前进迭代,慢指针slow每次走一步,也就是从当前节点指向下一个节点,而快指针fast则每次走两步,这样走下去,快指针fast每走一次和慢指针slow的距离就会拉开1(fast每次比slow多走一次,如果fast和slow都从head出发,则距原创 2021-02-10 23:50:58 · 322 阅读 · 0 评论