
LeetCode
文章平均质量分 55
Mr.Jk.Zhang
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
二叉树的层序遍历I、II
二叉树层序遍历给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。输入描述:示例:二叉树:[3,9,20,null,null,15,7],输出描述:返回其层次遍历结果:[[3],[9,20],[15,7]]# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None):#原创 2021-09-05 01:12:50 · 464 阅读 · 0 评论 -
最长重复子数组、字符串
718. 最长重复子数组给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。示例:输入:A: [1,2,3,2,1]B: [3,2,1,4,7]输出:3解释:长度最长的公共子数组是 [3, 2, 1] 。提示:1 <= len(A), len(B) <= 10000 <= A[i], B[i] < 100class Solution: def findLength(self, nums1: List[int], nums2: L原创 2021-09-05 00:43:04 · 433 阅读 · 0 评论 -
动态规划:不同路径I和II
63. 不同路径 II一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。示例 1:输入:obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]输出:2解释:3x3 网格的正中间有一个障碍物。从左上角到右下角一共原创 2021-09-05 00:41:29 · 331 阅读 · 0 评论 -
删除排序链表中的重复元素 II
82. 删除排序链表中的重复元素 II存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。返回同样按升序排列的结果链表。示例 1:输入:head = [1,2,3,3,4,4,5]输出:[1,2,5]示例 2:输入:head = [1,1,1,2,3]输出:[2,3]提示:链表中节点数目在范围 [0, 300] 内-100 <= Node.val <= 100题目数据保证链原创 2021-09-05 00:19:34 · 236 阅读 · 0 评论 -
乘积之和小于K的连续子数组的个数
713. 乘积小于K的子数组给定一个正整数数组 nums和整数 k 。请找出该数组内乘积小于 k 的连续的子数组的个数。示例 1:输入: nums = [10,5,2,6], k = 100输出: 8解释: 8个乘积小于100的子数组分别为: [10], [5], [2], [6], [10,5], [5,2], [2,6], [5,2,6]。需要注意的是 [10,5,2] 并不是乘积小于100的子数组。示例 2:输入: nums = [1,2,3], k = 0输出: 0提原创 2021-09-04 23:37:46 · 558 阅读 · 0 评论 -
递归&回溯 子集、子集II、幂集
78. 子集给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。示例 1:输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例 2:输入:nums = [0]输出:[[],[0]]提示:1 <= nums.length <= 10-10 <= nums[i] <= 10nums 中原创 2021-09-03 21:58:26 · 466 阅读 · 0 评论 -
LeetCode:回文子串、最长回文子串、最长回文子序列
647. 回文子串给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。示例 1:输入:“abc”输出:3解释:三个回文子串: “a”, “b”, “c”示例 2:输入:“aaa”输出:6解释:6个回文子串: “a”, “a”, “a”, “aa”, “aa”, “aaa”提示:输入的字符串长度不会超过 1000 。class Solution: def countSubstr原创 2021-08-24 20:07:57 · 208 阅读 · 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 。示例 2:输入:nums = [0,1,0,3,2,3]输出:4示例 3:输入:nums原创 2021-08-24 17:37:38 · 2076 阅读 · 0 评论 -
递归&回溯&动态规划:一文详解有关组合,组合求和,排列组合(有无重复元素)等一系列问题
77. 组合给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。示例 1:输入:n = 4, k = 2输出:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],]示例 2:输入:n = 1, k = 1输出:[[1]]提示:1 <= n <= 201 <= k <= nclass Solution: def combine(self, n: i原创 2021-08-20 13:16:15 · 272 阅读 · 0 评论 -
LeetCode: 乘积小于K的子数组、长度最小的子数组
713. 乘积小于K的子数组给定一个正整数数组 nums和整数 k 。请找出该数组内乘积小于 k 的连续的子数组的个数。示例 1:输入: nums = [10,5,2,6], k = 100输出: 8解释: 8个乘积小于100的子数组分别为: [10], [5], [2], [6], [10,5], [5,2], [2,6], [5,2,6]。需要注意的是 [10,5,2] 并不是乘积小于100的子数组。示例 2:输入: nums = [1,2,3], k = 0输出: 0提原创 2021-08-20 13:10:24 · 255 阅读 · 0 评论 -
动态规划系列:礼物的最大价值,最小路径之后,成本
1774. 最接近目标价格的甜点成本你打算做甜点,现在需要购买配料。目前共有 n 种冰激凌基料和 m 种配料可供选购。而制作甜点需要遵循以下几条规则:必须选择 一种 冰激凌基料。可以添加 一种或多种 配料,也可以不添加任何配料。每种类型的配料 最多两份 。给你以下三个输入:baseCosts ,一个长度为 n 的整数数组,其中每个 baseCosts[i] 表示第 i 种冰激凌基料的价格。toppingCosts,一个长度为 m 的整数数组,其中每个 toppingCosts[i]原创 2021-08-14 16:23:10 · 304 阅读 · 0 评论 -
算法面试题:最小差、单词距离(双指针,求最小差距离问题)
最小差给定两个整数数组a和b,计算具有最小差绝对值的一对数值(每个数组中取一个值),并返回该对数值的差示例:输入:{1, 3, 15, 11, 2}, {23, 127, 235, 19, 8}输出:3,即数值对(11, 8)提示:1 <= a.length, b.length <= 100000-2147483648 <= a[i], b[i] <= 2147483647正确结果在区间 [0, 2147483647] 内解题思路:排序+双指针clas原创 2021-08-03 22:37:55 · 467 阅读 · 0 评论 -
LeetCode 位运算系列 第一次出现的字符或者数字(I、II、III)、错误集合
错误集合集合 s 包含从 1 到 n 的整数。不幸的是,因为数据错误,导致集合里面某一个数字复制了成了集合里面的另外一个数字的值,导致集合 丢失了一个数字 并且 有一个数字重复 。给定一个数组 nums 代表了集合 S 发生错误后的结果。请你找出重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。示例 1:输入:nums = [1,2,2,4]输出:[2,3]示例 2:输入:nums = [1,1]输出:[1,2]提示:2 <= nums.length <= 104原创 2021-08-03 22:13:11 · 186 阅读 · 0 评论 -
经典面试题:编辑距离,跳跃游戏
LeetCode 72. 编辑距离题目描述给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例1输入:word1 = “horse”, word2 = “ros”输出: 3解释:horse -> rorse (将 ‘h’ 替换为 ‘r’)rorse -> rose (删除 ‘r’)rose -> ros (删除 ‘e’原创 2021-08-03 22:12:36 · 190 阅读 · 0 评论 -
动态规划之打家劫舍问题I,II,III
LeetCode 198. 打家劫舍你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4原创 2021-07-21 21:42:33 · 181 阅读 · 0 评论 -
LeetCode之字符串系列:有效的括号(匹配),有效的括号字符串,括号生成,最长有效的括号(困难)
20. 有效的括号给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = “()”输出:true示例 2:输入:s = “()[]{}”输出:true示例 3:输入:s = “(]”输出:false示例 4:输入:s = “([)]”输出:false示例 5:输入:s = “{[]}”输出:true原创 2021-07-14 21:34:35 · 1513 阅读 · 2 评论 -
剑指Offer&LeetCode:罗马数字转整数以及整数转罗马数字
13. 罗马数字转整数罗马数字包含以下七种字符: 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 +原创 2021-07-14 19:26:39 · 171 阅读 · 0 评论 -
滑动窗口系列:最接近的K个数,最接近的三个数之和, 最接近原点的 K 个点
LeetCode 658. 找到 K 个最接近的元素给定一个排序好的数组 arr ,两个整数 k 和 x ,从数组中找到最靠近 x(两数之差最小)的 k 个数。返回的结果必须要是按升序排好的。整数 a 比整数 b 更接近 x 需要满足:|a - x| < |b - x| 或者|a - x| == |b - x| 且 a < b示例 1:输入:arr = [1,2,3,4,5], k = 4, x = 3输出:[1,2,3,4]示例 2:输入:arr = [1,原创 2021-07-12 19:41:38 · 268 阅读 · 0 评论 -
LeetCode & 剑指 Offer:数值的整数次方、可被 K 整除的最小整数
剑指 Offer 16. 数值的整数次方实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问题。示例 1:输入:x = 2.00000, n = 10输出:1024.00000示例 2:输入:x = 2.10000, n = 3输出:9.26100示例 3:输入:x = 2.00000, n = -2输出:0.25000解释:2−2=1/2∗2=1/4=0.252^{-2} = 1/2*2 = 1/4 = 0.252−原创 2021-07-12 14:21:56 · 181 阅读 · 0 评论 -
Leetcode 4. 寻找两个正序数组的中位数(困难)
4. 寻找两个正序数组的中位数给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。示例 1:输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2示例 2:输入:nums1 = [1,2], nums2 = [3,4]输出:2.50000解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5示例 3:输原创 2021-07-04 17:48:42 · 105 阅读 · 0 评论 -
LeetCode: 字符串中最大的奇数/偶数
5788. 字符串中的最大奇数给你一个字符串 num ,表示一个大整数。请你在字符串 num 的所有 非空子字符串 中找出 值最大的奇数 ,并以字符串形式返回。如果不存在奇数,则返回一个空字符串 “” 。子字符串 是字符串中的一个连续的字符序列。示例 1:输入:num = “52”输出:“5”解释:非空子字符串仅有 “5”、“2” 和 “52” 。“5” 是其中唯一的奇数。示例 2:输入:num = “4206”输出:""解释:在 “4206” 中不存在奇数。示例 3:输入原创 2021-06-20 15:33:34 · 1125 阅读 · 0 评论 -
LeetCode & 剑指Offer:盛最多水的容器
11. 盛最多水的容器题目:给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。示例 1:输入:[1,8,6,2,5,4,8,3,7]输出:49解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。原创 2021-05-18 10:57:55 · 128 阅读 · 0 评论 -
LeetCode : 最长连续序列(利用哈希表解决)
LeetCode128. 最长连续序列(困难)给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。进阶:你可以设计并实现时间复杂度为 O(n) 的解决方案吗?示例 1:输入:nums = [100,4,200,1,3,2]输出:4解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。示例 2:输入:nums = [0,3,7,2,5,8,4,6,0,1]输出:9提示:0 <= nums.length &l原创 2021-05-18 10:23:49 · 376 阅读 · 0 评论 -
Top K 解法大全-- 字典+堆
692. 前K个高频单词给一非空的单词列表,返回前 k 个出现次数最多的单词。返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。示例 1:输入: [“i”, “love”, “leetcode”, “i”, “love”, “coding”], k = 2输出: [“i”, “love”]解析: “i” 和 “love” 为出现次数最多的两个单词,均为2次。注意,按字母顺序 “i” 在 “love” 之前。示例 2:输入: [“the”, “da原创 2021-04-30 14:11:06 · 296 阅读 · 0 评论 -
LeetCode &算法刷题笔记:回文数,回文链表,回文素数,反转链表
回文数题目给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。示例 1:输入:x = 121输出:true示例 2:输入:x = -121输出:false解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入:x = 10输出:false解释:从右向左读, 为 01 。因此它不是原创 2021-03-07 11:16:11 · 326 阅读 · 0 评论 -
LeetCode& 面试题:路径求和问题
面试:路径求和III (求和路径)题目: 给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。注意,路径不一定非得从二叉树的根节点或叶节点开始或结束,但是其方向必须向下(只能从父节点指向子节点方向)。二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。示例:root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8返回 3。和等于 8 的路径有:5 -> 35原创 2021-03-07 11:15:45 · 187 阅读 · 0 评论 -
LeetCode刷题系列:子数组系列2 - 最长连续递增序列
题目:最长连续递增序列(简单)给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], …, nums[r - 1], nums[r]] 就是连续递增子序列。示例 1:输入:nums = [1,3,5,4,7]输出:3解释:最长连续原创 2021-01-24 15:13:39 · 521 阅读 · 0 评论 -
剑指Offer之字符串系列问题总结:替换空格、字符串的排列、第一个只出现一次的字符、翻转单词顺序序列
剑指Offer(二):替换空格题目请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。解题思路代码实现Pythonclass Solution: # s 源字符串 def replaceSpace(self, s): # write code here return s.replace(' ', '%20')剑指Offer(二十七):字符串原创 2020-08-03 11:00:51 · 329 阅读 · 0 评论 -
LeetCode第200场周赛:统计三元组的个数+ 找出数组游戏的赢家
5475. 统计好三元组题目:给你一个整数数组 arr ,以及 a、b 、c 三个整数。请你统计其中好三元组的数量。如果三元组 (arr[i], arr[j], arr[k]) 满足下列全部条件,则认为它是一个 好三元组 。0 <= i < j < k < arr.length|arr[i] - arr[j]| <= a|arr[j] - arr[k]| <= b|arr[i] - arr[k]| <= c其中 |x| 表示 x 的绝对值。返回原创 2020-08-03 10:51:59 · 753 阅读 · 0 评论 -
剑指Offer&LeetCode:一文详尽寻找/删除/替换重复元素(II)
删除排序数组中的重复项题目:给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums = [0,0,1,1,1,2,2,3,3,4],函数应该返回新的原创 2020-07-11 12:44:05 · 263 阅读 · 0 评论 -
剑指Offer&LeetCode:一文详尽寻找/删除/替换重复元素(I)
217. 存在重复元素219 存在重复元素 II220. 存在重复元素 III统计重复个数寻找重复数原创 2020-07-09 12:01:52 · 258 阅读 · 0 评论 -
剑指Offer系列--面试题:顺时针打印矩阵
剑指Offer(十九):顺时针打印矩阵题目输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:则依次打印出数组:1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10。解题思路将结果存入vector数组,从左到右,再从上到下,再从右到左,最后从下到上遍历。C++class Solution {public: vector<int> printMatrix(vector<vector<int>原创 2020-06-08 21:29:08 · 228 阅读 · 0 评论 -
剑指Offer&LeetCode:一文详述面试中的TOP K系列问题解决方案
LeetCode 378. 有序矩阵中第K小的元素给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素。请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素。示例:matrix = [[ 1, 5, 9],[10, 11, 13],[12, 13, 15]],k = 8,返回 13。提示:你可以假设 k 的值永远是有效的, 1 ≤ k ≤ n2。解题思路:优先队列使用最大堆,当队列中的元素大于k时,便弹出队头元素,由于使用的是最原创 2020-06-01 21:16:40 · 409 阅读 · 0 评论 -
剑指Offer(栈系列)-- 包含min函数的栈
剑指Offer(二十):包含min函数的栈题目定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.min(); --> 返回 -3.minStack.pop();minStack.原创 2020-06-01 20:46:29 · 292 阅读 · 0 评论 -
LeetCode & 剑指Offer:一文详解六道股票问题(买卖股票的最佳时机)--动态规划
介绍:股票问题一共有六道:买卖股票的最佳时机(I,II,III,IV)、含冷冻期、含手续费。本次解析还包括一道面试题:面试题63. 股票的最大利润(即买卖股票的最佳时机I)股票问题的方法就是 动态规划,因为它包含了重叠子问题,即买卖股票的最佳时机是由之前买或不买的状态决定的,而之前买或不买又由更早的状态决定的…LeetCode 121 :买卖股票的最佳时机I给定一个数组,它的第 i 个元素...原创 2020-05-07 09:15:26 · 1056 阅读 · 0 评论 -
剑指Offer(五十八):对称的二叉树
剑指Offer(五十八):对称的二叉树题目请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。代码实现/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNod...原创 2020-05-06 11:19:55 · 211 阅读 · 0 评论 -
LeetCode& 剑指Offer: 二叉搜索树系列:验证二叉搜索树、二叉搜索树中的众数(利用中序遍历的方法解决)
LeetCode 98. 验证二叉搜索树给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入: 2 / \ 1 3输出: true示例 2:输入: 5/ \1 4 ...原创 2020-05-06 11:18:38 · 371 阅读 · 0 评论 -
剑指Offer(三十九):平衡二叉树
题目输入一棵二叉树,判断该二叉树是否是平衡二叉树。解题思路平衡二叉树的定义是:所谓的平衡之意,就是树中任意一个结点下左右两个子树的高度差不超过 1。解题思路有两种,只遍历一次的方法最优。 此题是求二叉树的深度的延伸问题代码实现# Definition for a binary tree node.# class TreeNode:# def __init__(self, ...原创 2020-05-04 08:30:53 · 197 阅读 · 0 评论 -
剑指Offer(十八):二叉树的镜像
题目操作给定的二叉树,将其变换为源二叉树的镜像。如下图所示:解题思路先交换根节点的两个子结点之后,我们注意到值为10、6的结点的子结点仍然保持不变,因此我们还需要交换这两个结点的左右子结点。做完这两次交换之后,我们已经遍历完所有的非叶结点。此时变换之后的树刚好就是原始树的镜像。交换示意图如下所示:代码实现:C++代码:/** * Definition for a binar...原创 2020-05-04 08:29:22 · 193 阅读 · 0 评论 -
LeetCode 二叉树中的路径总和问题(判断以及列出所有路径)、二叉树的所有路径、二叉树中的最大路径和
LeetCode 112. 路径总和给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / ...原创 2020-05-04 08:27:37 · 553 阅读 · 0 评论