刷题
jingxindeyi
向来枉费推移力 此日中流自在行
展开
-
归并排序
【代码】归并排序。原创 2024-04-27 14:13:28 · 61 阅读 · 0 评论 -
leetcode-寻找重复数
【代码】leetcode-寻找重复数。原创 2024-04-18 01:36:36 · 185 阅读 · 0 评论 -
快排不同实现
区别主要在于如何将大于和小于等于pt_value的元素分组测试样例case。原创 2024-04-16 01:49:45 · 215 阅读 · 0 评论 -
leetcode-76. 最小覆盖子串
【代码】leetcode-76. 最小覆盖子串。原创 2024-02-03 19:40:48 · 320 阅读 · 0 评论 -
合并排序可视化
参照。原创 2023-12-23 18:28:59 · 385 阅读 · 0 评论 -
leetcode-33. 搜索旋转排序数组
题目要求logn复杂度, 应该用二分法,将数组分隔成任意两部分时一定有一份是有序的 可以通过有序的那部分来决定下次搜索的区间。原创 2022-12-26 02:25:48 · 100 阅读 · 0 评论 -
leetcode-21 合并两个有序链表
【代码】leetcode-21 合并两个有序链表。原创 2022-12-24 21:58:30 · 79 阅读 · 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 · 76 阅读 · 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 · 500 阅读 · 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 · 696 阅读 · 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 · 62 阅读 · 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 · 153 阅读 · 0 评论 -
leetcode-655. 输出二叉树
在一个 m*n 的二维字符串数组中输出二叉树,并遵守以下规则:行数 m 应当等于给定二叉树的高度。列数 n 应当总是奇数。根节点的值(以字符串格式给出)应当放在可放置的第一行正中间。根节点所在的行与列会将剩余空间划分为两部分(左下部分和右下部分)。你应该将左子树输出在左下部分,右子树输出在右下部分。左下和右下部分应当有相同的大小。即使一个子树为空而另一个非空,你不需要为空的子树输出任何东西,但仍需要为另一个子树留出足够的空间。然而,如果两个子树都为空则不需要为它们留出任何空间。每个未使用的空间应包原创 2022-03-09 23:23:27 · 108 阅读 · 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 · 91 阅读 · 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 · 103 阅读 · 0 评论 -
leetcode-337. 打家劫舍 III
小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为 root 。除了 root 之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果 两个直接相连的房子在同一天晚上被打劫 ,房屋将自动报警。给定二叉树的 root 。返回 在不触动警报的情况下 ,小偷能够盗取的最高金额 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/house-robber-iii原创 2022-02-23 01:18:57 · 68 阅读 · 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 · 208 阅读 · 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 · 53 阅读 · 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 · 190 阅读 · 0 评论 -
leetcode-98 验证二叉搜索树
98. 验证二叉搜索树给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。文章目录1. 依据二叉树的中序遍历1. 依据二叉树的中序遍历中序遍历先遍历左边节点 之后遍历右边节点记录下上次遍历节点 如果当前节点值小于等于上次遍历节点值则不满足# Definition for a binary tree node.# cl原创 2022-02-10 23:44:18 · 94 阅读 · 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 · 173 阅读 · 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 · 62 阅读 · 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 · 77 阅读 · 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 · 283 阅读 · 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 · 88 阅读 · 0 评论 -
leetcode- 1104. 二叉树寻路
在一棵无限的二叉树上,每个节点都有两个子节点,树中的节点 逐行 依次按 “之” 字形进行标记。如下图所示,在奇数行(即,第一行、第三行、第五行……)中,按从左到右的顺序进行标记;而偶数行(即,第二行、第四行、第六行……)中,按从右到左的顺序进行标记。给你树上某一个节点的标号 label,请你返回从根节点到该标号为 label 节点的路径,该路径是由途经的节点标号所组成的。 示例 1:输入:label = 14输出:[1,3,4,14]来源:力扣(LeetCode)链接:h原创 2022-01-31 00:25:44 · 81 阅读 · 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 · 132 阅读 · 0 评论 -
leetcode-22. 括号生成
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例 1:输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]示例 2:输入:n = 1来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/generate-parentheses著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。递归遍历即可 每个位置都原创 2022-01-20 01:30:18 · 227 阅读 · 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 · 78 阅读 · 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 · 65 阅读 · 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 · 64 阅读 · 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 · 46 阅读 · 0 评论 -
pdd笔试-数字组合
多多君最近在研究某种数字组合:定义为:每个数字的十进制表示中(0~9),每个数位各不相同且各个数位之和等于N。满足条件的数字可能很多,找到其中的最小值即可。多多君还有很多研究课题,于是多多君找到了你--未来的计算机科学家寻求帮助。思路0~9 各个数位不重复 解空间集并不大可以得出 1位数 最大值为 9 , 2位数最大值17(9+8)...因为对于给定 N 我们可以算出它由几位数组成 例如给定 N = 1515 > 9 && 15 < 17, N 可能由2位数组原创 2021-08-25 23:37:15 · 268 阅读 · 0 评论 -
leetcode-简化路径
给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 '/' 开头),请你将其转化为更加简洁的规范路径。在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,'//')都被视为单个斜杠 '/' 。 对于此问题,任何其他格式的点(例如,'...')均被视为文件/目录名称。请注意,返回的 规范路径 必须遵循下述格式:始终以斜杠 '/' 开.原创 2021-06-26 13:46:23 · 101 阅读 · 0 评论 -
leetcode-买卖股票的最佳时机 III
123. 买卖股票的最佳时机 III给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 示例 1:输入:prices = [3,3,5,0,0,3,1,4]输出:6解释:在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获得利润 = 3-0 = 3 。 随后,在第 7 天原创 2021-06-21 01:30:41 · 116 阅读 · 0 评论 -
leetcode-买卖股票的最佳时机 II
给定一个数组 prices ,其中 prices[i] 是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 示例 1:输入: prices = [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。 随后,在第 4原创 2021-06-21 01:08:35 · 66 阅读 · 0 评论 -
leetcode - 戳气球(312)
有 n 个气球,编号为0 到 n - 1,每个气球上都标有一个数字,这些数字存在数组 nums 中。现在要求你戳破所有的气球。戳破第 i 个气球,你可以获得 nums[i - 1] * nums[i] * nums[i + 1] 枚硬币。 这里的 i - 1 和 i + 1 代表和 i 相邻的两个气球的序号。如果 i - 1或 i + 1 超出了数组的边界,那么就当它是一个数字为 1 的气球。求所能获得硬币的最大数量。 示例 1:输入:nums = [3,1,5,8]输出:167解释:原创 2021-06-18 01:28:27 · 181 阅读 · 0 评论 -
leetcode - 从中序与后序遍历序列构造二叉树(106)
根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出中序遍历 inorder = [9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树: 3 / \ 9 20 / \ 15 7来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/construct-binary-tree-from-inorder-and-po原创 2021-06-18 00:21:13 · 93 阅读 · 0 评论 -
leetcode-从前序与中序遍历序列构造二叉树
根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-in原创 2021-06-18 00:00:22 · 121 阅读 · 0 评论 -
leetcode- 被围绕的区域
https://leetcode-cn.com/problems/surrounded-regions/给你一个 m x n 的矩阵 board ,由若干字符 'X' 和 'O' ,找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充。如果 O 区域不被围绕 则必有一个 O 处于边界上一次从边界开始寻找区域 比较为不改变 其余 O 变为 X 即可class Solution { public void solve(char[][] board) { i原创 2021-06-17 20:15:19 · 50 阅读 · 0 评论