
刷题
刷题
jingxindeyi
清明在躬,氣志如神。
展开
-
leetcode-84-柱状图最大的矩形
困难相关标签相关企业给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1。求在该柱状图中,能够勾勒出来的矩形的最大面积。原创 2025-01-22 00:37:09 · 184 阅读 · 0 评论 -
leetcode-75-颜色分类
给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地 对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。必须在不使用库内置的 sort 函数的情况下解决这个问题。原创 2025-01-21 00:24:45 · 322 阅读 · 0 评论 -
找出最接近当前的数的2的指数的数
HashMap 总是使用2的幂作为哈希表的大小, 它的计算方式如下 static final int tableSizeFor(int cap) { int n = cap - 1; n |= n >>> 1; n |= n >>> 2; n |= n >>>...原创 2019-07-12 23:28:03 · 1192 阅读 · 0 评论 -
堆简单实现
使用数组实现添加元素: 数组末尾append 从堆底向上调整 如果发现父节点比当前节点小就交换位置移除元素: 数组末尾调整到数组头部(堆顶) 从堆顶向下调整 如果发现子节点比当前节点小交换位置import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.List;interface IAdjust<T> { boolean need原创 2020-11-21 13:14:38 · 91 阅读 · 0 评论 -
非递归实现合并排序
通过循环 分别对每两个元素 四个元素…内部进行排序,模拟递归的过程//hebing [l,mid] [mid+1,r] void hebing(int *a,int *b,int l,int mid,int r){ int k=l; int rb=mid+1; while((l&lt;=mid)&amp;&amp;(rb&lt;=r)){ if(a[l...原创 2018-08-27 10:16:16 · 596 阅读 · 0 评论 -
插入排序可视化
【代码】插入排序可视化。原创 2023-12-28 01:45:53 · 388 阅读 · 0 评论 -
二叉树的公共祖先
【代码】二叉树的公共祖先。原创 2024-06-17 00:17:10 · 157 阅读 · 0 评论 -
leetcode-169-多数元素
【代码】leetcode-169-多数元素。原创 2024-06-15 23:53:50 · 401 阅读 · 1 评论 -
归并排序
【代码】归并排序。原创 2024-04-27 14:13:28 · 155 阅读 · 0 评论 -
leetcode-寻找重复数
【代码】leetcode-寻找重复数。原创 2024-04-18 01:36:36 · 235 阅读 · 0 评论 -
快排不同实现
区别主要在于如何将大于和小于等于pt_value的元素分组测试样例case。原创 2024-04-16 01:49:45 · 262 阅读 · 0 评论 -
leetcode-76. 最小覆盖子串
【代码】leetcode-76. 最小覆盖子串。原创 2024-02-03 19:40:48 · 375 阅读 · 0 评论 -
合并排序可视化
参照。原创 2023-12-23 18:28:59 · 437 阅读 · 0 评论 -
leetcode-33. 搜索旋转排序数组
题目要求logn复杂度, 应该用二分法,将数组分隔成任意两部分时一定有一份是有序的 可以通过有序的那部分来决定下次搜索的区间。原创 2022-12-26 02:25:48 · 147 阅读 · 0 评论 -
leetcode-21 合并两个有序链表
【代码】leetcode-21 合并两个有序链表。原创 2022-12-24 21:58:30 · 122 阅读 · 0 评论 -
leetcode-208 Trie树
208. 实现 Trie (前缀树)Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。请你实现 Trie 类:Trie() 初始化前缀树对象。void insert(String word) 向前缀树中插入字符串 word 。boolean search(String word) 如果字符串 word 在前缀树中,返回 true(即,在检索之前已经插入);否则,返回 false 。原创 2022-05-31 02:03:45 · 115 阅读 · 0 评论 -
跳表实现 (redis|java)
class Node: value = None levels = []class Skiplist: def __init__(self): self.head = Node() self.max_level = 500 self.head.levels = [None for i in range(self.max_level)] self.currLevel = 1 def s原创 2022-05-09 01:02:29 · 550 阅读 · 0 评论 -
leetcode-143 重排链表
给定一个单链表 L 的头节点 head ,单链表 L 表示为:L0 → L1 → … → Ln - 1 → Ln请将其重新排列后变为:L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → …来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reorder-list著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。输入:head = [1,2,3,4]输出:[1,4,2,3]构建一个 ta原创 2022-04-04 17:46:09 · 756 阅读 · 0 评论 -
leetcode-300 最长递增子序列
给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest原创 2022-04-04 17:18:06 · 99 阅读 · 0 评论 -
leetcode-56 合并区间
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。 示例 1:输入:intervals = [[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].来源:力扣(LeetCode)链接:https:/原创 2022-04-03 21:01:45 · 234 阅读 · 0 评论 -
leetcode-655. 输出二叉树
在一个 m*n 的二维字符串数组中输出二叉树,并遵守以下规则:行数 m 应当等于给定二叉树的高度。列数 n 应当总是奇数。根节点的值(以字符串格式给出)应当放在可放置的第一行正中间。根节点所在的行与列会将剩余空间划分为两部分(左下部分和右下部分)。你应该将左子树输出在左下部分,右子树输出在右下部分。左下和右下部分应当有相同的大小。即使一个子树为空而另一个非空,你不需要为空的子树输出任何东西,但仍需要为另一个子树留出足够的空间。然而,如果两个子树都为空则不需要为它们留出任何空间。每个未使用的空间应包原创 2022-03-09 23:23:27 · 139 阅读 · 0 评论 -
leetcode-142 环形链表 II
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。不允许修改 链表。 来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/linked-list-cycle-ii著作权归领扣网络所有。商业转载请联系官原创 2022-03-02 00:12:03 · 189 阅读 · 0 评论 -
leetcode-450. 删除二叉搜索树中的节点
给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一般来说,删除节点可分为两个步骤:首先找到需要删除的节点;如果找到了,删除它。输入:root = [5,3,6,2,4,null,7], key = 3输出:[5,4,6,2,null,null,7]解释:给定需要删除的节点值是 3,所以我们首先找到 3 这个节点,然后删除它。一个正确的答案是 [5,4,6,2,null原创 2022-02-28 00:38:20 · 176 阅读 · 0 评论 -
leetcode-337. 打家劫舍 III
小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为 root 。除了 root 之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果 两个直接相连的房子在同一天晚上被打劫 ,房屋将自动报警。给定二叉树的 root 。返回 在不触动警报的情况下 ,小偷能够盗取的最高金额 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/house-robber-iii原创 2022-02-23 01:18:57 · 124 阅读 · 0 评论 -
leetcode-113 路经总和(2)
给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。叶子节点 是指没有子节点的节点。 来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/path-sum-ii著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。遍历所有的路径找出合为目标的即可依据题意 选择先序遍历def pathSum(self, root: Optional[TreeNo原创 2022-02-16 00:09:24 · 241 阅读 · 0 评论 -
leetcode-173 二叉搜索树迭代器
实现一个二叉搜索树迭代器类BSTIterator ,表示一个按中序遍历二叉搜索树(BST)的迭代器:BSTIterator(TreeNode root) 初始化 BSTIterator 类的一个对象。BST 的根节点 root 会作为构造函数的一部分给出。指针应初始化为一个不存在于 BST 中的数字,且该数字小于 BST 中的任何元素。boolean hasNext() 如果向指针右侧遍历存在数字,则返回 true ;否则返回 false 。int next()将指针向右移动,然后返回指针处的数字。原创 2022-02-15 00:05:16 · 83 阅读 · 0 评论 -
leetcode-99. 恢复二叉搜索树
99. 恢复二叉搜索树给你二叉搜索树的根节点 root ,该树中的 恰好 两个节点的值被错误地交换。请在不改变其结构的情况下,恢复这棵树 。 输入:root = [1,3,null,null,2]输出:[3,1,null,null,2]解释:3 不能是 1 的左孩子,因为 3 > 1 。交换 1 和 3 使二叉搜索树有效。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/recover-binary-search-tree著作权归领原创 2022-02-14 23:39:52 · 255 阅读 · 0 评论 -
leetcode-98 验证二叉搜索树
98. 验证二叉搜索树给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。文章目录1. 依据二叉树的中序遍历1. 依据二叉树的中序遍历中序遍历先遍历左边节点 之后遍历右边节点记录下上次遍历节点 如果当前节点值小于等于上次遍历节点值则不满足# Definition for a binary tree node.# cl原创 2022-02-10 23:44:18 · 181 阅读 · 0 评论 -
leetcode-1447. 最简分数
1447. 最简分数给你一个整数 n ,请你返回所有 0 到 1 之间(不包括 0 和 1)满足分母小于等于 n 的 最简 分数 。分数可以以 任意 顺序返回。 示例 1:输入:n = 2输出:["1/2"]解释:"1/2" 是唯一一个分母小于等于 2 的最简分数。1. 辗转相除法计算最大公约数如果分子分母最大公约数非1 说明不是最简分数说明 def gcd(top, bottom): while top > 0:原创 2022-02-10 23:09:19 · 250 阅读 · 0 评论 -
leetcode-18 四数之和
18. 四数之和给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):0 <= a, b, c, d < na、b、c 和 d 互不相同nums[a] + nums[b] + nums[c] + nums[d] == target你可以按 任意顺序 返回答案 。 示例 1:输入:原创 2022-02-09 23:36:01 · 88 阅读 · 0 评论 -
leetcode-1405. 最长快乐字符串
1405. 最长快乐字符串如果字符串中不含有任何 'aaa','bbb' 或 'ccc' 这样的字符串作为子串,那么该字符串就是一个「快乐字符串」。给你三个整数 a,b ,c,请你返回 任意一个 满足下列全部条件的字符串 s:s 是一个尽可能长的快乐字符串。s 中 最多 有a 个字母 'a'、b 个字母 'b'、c 个字母 'c' 。s 中只含有 'a'、'b' 、'c' 三种字母。如果不存在这样的字符串 s ,请返回一个空字符串 ""。 1. 递归构建 [超时]class Sol原创 2022-02-08 00:50:35 · 107 阅读 · 0 评论 -
leetcode-15. 三数之和
15. 三数之和给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]] 文章目录排序后双指针 [py]排序后双指针 [py]class Solution: def threeSum(self, nums: Lis原创 2022-02-07 23:37:46 · 304 阅读 · 0 评论 -
leetcode-16. 最接近的三数之和
给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在恰好一个解。 示例 1:输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/3sum-closest原创 2022-02-07 23:21:53 · 120 阅读 · 0 评论 -
leetcode- 1104. 二叉树寻路
在一棵无限的二叉树上,每个节点都有两个子节点,树中的节点 逐行 依次按 “之” 字形进行标记。如下图所示,在奇数行(即,第一行、第三行、第五行……)中,按从左到右的顺序进行标记;而偶数行(即,第二行、第四行、第六行……)中,按从右到左的顺序进行标记。给你树上某一个节点的标号 label,请你返回从根节点到该标号为 label 节点的路径,该路径是由途经的节点标号所组成的。 示例 1:输入:label = 14输出:[1,3,4,14]来源:力扣(LeetCode)链接:h原创 2022-01-31 00:25:44 · 174 阅读 · 0 评论 -
leetcode- 282. 给表达式添加运算符
给定一个仅包含数字 0-9 的字符串 num 和一个目标值整数 target ,在 num 的数字之间添加 二元 运算符(不是一元)+、- 或 * ,返回所有能够得到目标值的表达式。 示例 1:输入: num = "123", target = 6输出: ["1+2+3", "1*2*3"] 来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/expression-add-operators著作权归领扣网络所有。商业转载请联系官方授权,原创 2022-01-23 00:50:05 · 164 阅读 · 0 评论 -
leetcode-22. 括号生成
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例 1:输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]示例 2:输入:n = 1来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/generate-parentheses著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。递归遍历即可 每个位置都原创 2022-01-20 01:30:18 · 255 阅读 · 0 评论 -
leetcode-689. 三个无重叠子数组的最大和
给你一个整数数组 nums 和一个整数 k ,找出三个长度为 k 、互不重叠、且全部数字和(3 * k 项)最大的子数组,并返回这三个子数组。以下标的数组形式返回结果,数组中的每一项分别指示每个子数组的起始位置(下标从 0 开始)。如果有多个结果,返回字典序最小的一个。 示例 1:输入:nums = [1,2,1,2,6,7,5,1], k = 2输出:[0,3,5]解释:子数组 [1, 2], [2, 6], [7, 5] 对应的起始下标为 [0, 3, 5]。也可以取 [2, 1]原创 2022-01-05 02:07:25 · 190 阅读 · 0 评论 -
leetcode-剑指 Offer II 010. 和为 k 的子数组
给定一个整数数组和一个整数 k ,请找到该数组中和为 k 的连续子数组的个数。 示例 1 :输入:nums = [1,1,1], k = 2输出: 2解释: 此题 [1,1] 与 [1,1] 为两种不同的情况来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/QTMn0o著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。文章目录1. 简单思路 【超时】2. 前缀和1. 简单思路 【超时】暴力遍历从当前位置开原创 2021-12-19 01:03:59 · 97 阅读 · 0 评论 -
leetcode-窥探迭代器
请你设计一个迭代器,除了支持 hasNext 和 next 操作外,还支持 peek 操作。实现 PeekingIterator 类:PeekingIterator(int[] nums) 使用指定整数数组 nums 初始化迭代器。int next() 返回数组中的下一个元素,并将指针移动到下个元素处。bool hasNext() 如果数组中存在下一个元素,返回 true ;否则,返回 false 。int peek() 返回数组中的下一个元素,但 不 移动指针。 来源:力扣(LeetC原创 2021-10-05 17:48:20 · 89 阅读 · 0 评论 -
整数转罗马数字
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。通常原创 2021-09-28 00:54:04 · 79 阅读 · 0 评论