![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode
chou&shuai
一名资深菜鸡的成长之路
展开
-
面试题 --树
面试题 17.12. BiNode二叉树数据结构TreeNode可用来表示单向链表(其中left置空,right为下一个链表节点)。实现一个方法,把二叉搜索树转换为单向链表,要求依然符合二叉搜索树的性质,转换操作应是原址的,也就是在原始的二叉搜索树上直接修改。返回转换后的单向链表的头节点。注意:本题相对原题稍作改动示例:输入: [4,2,5,1,3,null,6,0]输出: [0,null,1,null,2,null,3,null,4,null,5,null,6]解析过程:/** * De原创 2021-12-24 16:47:08 · 219 阅读 · 0 评论 -
二叉搜索树III
1008. 前序遍历构造二叉搜索树返回与给定前序遍历 preorder 相匹配的二叉搜索树(binary search tree)的根结点。(回想一下,二叉搜索树是二叉树的一种,其每个节点都满足以下规则,对于 node.left 的任何后代,值总 < node.val,而 node.right 的任何后代,值总 > node.val。此外,前序遍历首先显示节点 node 的值,然后遍历 node.left,接着遍历 node.right。)题目保证,对于给定的测试用例,总能找到满足要求的二原创 2021-12-20 16:21:35 · 182 阅读 · 0 评论 -
剑指offer——树
剑指 Offer 27. 二叉树的镜像请完成一个函数,输入一个二叉树,该函数输出它的镜像。示例 1: 4 / \ 2 7 / \ / \1 3 6 9输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1] 4 / \ 7 2 / \ / \9 6 3 1限制:0 <= 节点个数 <= 1000解析过程:/** * Definition for a bi原创 2021-12-13 19:30:42 · 605 阅读 · 0 评论 -
树系列问题IV——二叉树
623. 在二叉树中增加一行给定一个二叉树,根节点为第1层,深度为 1。在其第 d 层追加一行值为 v 的节点。添加规则:给定一个深度值 d (正整数),针对深度为 d-1 层的每一非空节点 N,为 N 创建两个值为 v 的左子树和右子树。将 N 原先的左子树,连接为新节点 v 的左子树;将 N 原先的右子树,连接为新节点 v 的右子树。如果 d 的值为 1,深度 d - 1 不存在,则创建一个新的根节点 v,原先的整棵树将作为 v 的左子树。示例 1:输入: 二叉树如下所示:原创 2021-12-13 16:17:28 · 497 阅读 · 0 评论 -
树系列问题-N叉树
589. N 叉树的前序遍历给定一个 N 叉树,返回其节点值的 前序遍历 。N 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。示例 1:输入:root = [1,null,3,2,4,null,5,6]输出:[1,3,5,6,2,4]示例 2:输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]输出:[原创 2021-12-10 16:01:34 · 1020 阅读 · 0 评论 -
字符串与数组问题
1446. 连续字符给你一个字符串 s ,字符串的「能量」定义为:只包含一种字符的最长非空子字符串的长度。请你返回字符串的能量。示例 1:输入:s = “leetcode”输出:2解释:子字符串 “ee” 长度为 2 ,只包含字符 ‘e’ 。示例 2:输入:s = “abbcccddddeeeeedcba”输出:5解释:子字符串 “eeeee” 长度为 5 ,只包含字符 ‘e’ 。示例 3:输入:s = “triplepillooooow”输出:5示例 4:输入:s = “ho原创 2021-12-01 14:19:17 · 79 阅读 · 0 评论 -
二叉搜索树II
501. 二叉搜索树中的众数给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。假定 BST 有如下定义:结点左子树中所含结点的值小于等于当前结点的值结点右子树中所含结点的值大于等于当前结点的值左子树和右子树都是二叉搜索树例如:给定 BST [1,null,2,2], 1 \ 2 / 2返回[2].提示:如果众数超过1个,不需考虑输出顺序解析过程:对于每组数据,在一行中输出一个整数,表示这组数据的众数。数据原创 2021-11-24 16:43:41 · 160 阅读 · 0 评论 -
树系列问题II——二叉树
106. 从中序与后序遍历序列构造二叉树根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出中序遍历 inorder = [9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树:3/ 9 20/ 15 7解析过程:/** * Definition for a binary tree node. * public class TreeNode { * int val; *原创 2021-11-12 16:58:01 · 368 阅读 · 0 评论 -
二叉搜索树
700. 二叉搜索树中的搜索给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。例如,给定二叉搜索树: 4 / \ 2 7 / \1 3和值: 2你应该返回如下子树: 2 / \ 1 3在上述示例中,如果要找的值是 5,但因为没有节点值为 5,我们应该返回 NULL。解析过程:/** * Definition for a binary原创 2021-11-07 22:20:14 · 4978 阅读 · 0 评论 -
2021-11-05
1218. 最长定差子序列给你一个整数数组 arr 和一个整数 difference,请你找出并返回 arr 中最长等差子序列的长度,该子序列中相邻元素之间的差等于 difference 。子序列 是指在不改变其余元素顺序的情况下,通过删除一些元素或不删除任何元素而从 arr 派生出来的序列。示例 1:输入:arr = [1,2,3,4], difference = 1输出:4解释:最长的等差子序列是 [1,2,3,4]。示例 2:输入:arr = [1,3,5,7], difference原创 2021-11-05 14:45:06 · 55 阅读 · 0 评论 -
树系列问题 2021-11-4
144. 二叉树的前序遍历给你二叉树的根节点 root ,返回它节点值的 前序 遍历。提示:树中节点数目在范围 [0, 100] 内-100 <= Node.val <= 100示例 1:输入:root = [1,null,2,3]输出:[1,2,3]示例 2:输入:root = []输出:[]示例 3:输入:root = [1]输出:[1]示例 4:输入:root = [1,2]输出:[1,2]示例 5:输入:root = [1,null,2]输出:原创 2021-11-04 15:55:19 · 134 阅读 · 0 评论 -
有效的完全平方数 2021-11-4
367. 有效的完全平方数给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。提示:1 <= num <= 2^31 - 1进阶:不要 使用任何内置的库函数,如 sqrt 。示例 1:输入:num = 16输出:true示例 2:输入:num = 14输出:false解析过程:方法一:使用库函数sqrtclass Solution { public boolean isPerfectSquare(原创 2021-11-04 15:12:40 · 60 阅读 · 0 评论 -
用栈实现队列 2021-11-03
232. 用栈实现队列请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false说明:你只能使用标准的栈操作 —— 也就是只有 push to top, peek/pop from t原创 2021-11-03 16:11:09 · 67 阅读 · 0 评论 -
分糖果问题
575. 分糖果Alice 有 n 枚糖,其中第 i 枚糖的类型为 candyType[i] 。Alice 注意到她的体重正在增长,所以前去拜访了一位医生。医生建议 Alice 要少摄入糖分,只吃掉她所有糖的 n / 2 即可(n 是一个偶数)。Alice 非常喜欢这些糖,她想要在遵循医生建议的情况下,尽可能吃到最多不同种类的糖。给你一个长度为 n 的整数数组 candyType ,返回: Alice 在仅吃掉 n / 2 枚糖的情况下,可以吃到糖的最多种类数。示例 1:输入:candyType原创 2021-11-02 16:18:27 · 107 阅读 · 0 评论 -
有关数组问题
566. 重塑矩阵在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原始数据。给你一个由二维数组 mat 表示的 m x n 矩阵,以及两个正整数 r 和 c ,分别表示想要的重构的矩阵的行数和列数。重构后的矩阵需要将原始矩阵的所有元素以相同的 行遍历顺序 填充。如果具有给定参数的 reshape 操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。提示:m == mat.lengthn ==原创 2021-10-29 15:38:53 · 73 阅读 · 0 评论 -
排列问题 2021-10-28
46. 全排列给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。提示:1 <= nums.length <= 6-10 <= nums[i] <= 10nums 中的所有整数 互不相同示例 1:输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2:输入:nums = [0,1]输出:[[0,1],[1,0]]示例 3:原创 2021-10-28 20:59:59 · 119 阅读 · 0 评论 -
有效和无效括号问题
20. 有效的括号给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = “()”输出:true示例 2:输入:s = “()[]{}”输出:true示例 3:输入:s = “(]”输出:false示例 4:输入:s = “([)]”输出:false示例 5:输入:s = “{[]}”输出:true解析过程:class原创 2021-10-27 17:01:23 · 287 阅读 · 0 评论 -
496. 下一个更大元素 I (Leecode)
496. 下一个更大元素 I给你两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。请你找出 nums1 中每个元素在 nums2 中的下一个比其大的值。nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出 -1 。示例 1:输入: nums1 = [4,1,2], nums2 = [1,3,4,2].输出: [-1,3,-1]解释:对于 num1 中的数字 4 ,你原创 2021-10-26 16:04:56 · 93 阅读 · 0 评论 -
位运算 2021-10-25
231. 2 的幂给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。示例 1:输入:n = 1输出:true解释:20 = 1示例 2:输入:n = 16输出:true解释:24 = 16示例 3:输入:n = 3输出:false示例 4:输入:n = 4输出:true示例 5:输入:n = 5输出:false解析过程:方法一:cla原创 2021-10-25 22:11:23 · 104 阅读 · 0 评论 -
动态规划 2021-10-25
爬楼梯假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1 阶 + 1 阶 + 1 阶1 阶 + 2 阶2 阶 + 1 阶过程解析:方法一:递归:class Solution { public int cli.原创 2021-10-25 00:31:51 · 67 阅读 · 0 评论 -
递归/回溯 2021-10-21
21. 合并两个有序链表将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]过程解析:/** * Definition for singly-linked list. * public class ListNode {原创 2021-10-21 10:24:47 · 194 阅读 · 0 评论 -
DFS/BFS
733. 图像渲染有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 0 到 65535 之间。给你一个坐标 (sr, sc) 表示图像渲染开始的像素值(行 ,列)和一个新的颜色值 newColor,让你重新上色这幅图像。为了完成上色工作,从初始坐标开始,记录初始坐标的上下左右四个方向上像素值与初始坐标相同的相连像素点,接着再记录这四个方向上符合条件的像素点与他们对应四个方向上像素值与初始坐标相同的相连像素点,……,重复该过程。将所有有记录的像素点的颜色值改为新的颜色值。最后返原创 2021-10-19 21:49:25 · 59 阅读 · 0 评论 -
滑动窗口(字符串)
无重复字符的最长子串给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: s = “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: s = “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,.原创 2021-10-18 16:55:01 · 175 阅读 · 0 评论 -
2021-10-19 双指针问题 + 链表问题
双指针977. 有序数组的平方给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。提示:1 <= nums.length <= 10^4-10^4 <= nums[i] <= 10 ^4nums 已按 非递减顺序 排序示例 1:输入:nums = [-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为 [16,1,0,9,100]排序后,数组变为 [0,1,9,16,10原创 2021-10-13 15:11:21 · 68 阅读 · 0 评论 -
2021-10-08
(赎金信与字母异位词是一种类型)383. 赎金信给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串 ransom 能不能由第二个字符串 magazines 里面的字符构成。如果可以构成,返回 true ;否则返回 false。(题目说明:为了不暴露赎金信字迹,要从杂志上搜索各个需要的字母,组成单词来表达意思。杂志字符串中的每个字符只能在赎金信字符串中使用一次。)提示:你可以假设两个字符串均只含有小写字母。示例 1:输入:ransomNote = “a”原创 2021-10-08 17:10:46 · 44 阅读 · 0 评论 -
2021-10-08
字符串中的第一个唯一字符给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。提示:你可以假定该字符串只包含小写字母。示例:s = “leetcode”返回 0s = “loveleetcode”返回 2过程解析:class Solution { public int firstUniqChar(String s) { //用HashMap求解,遍历字符串,将字符加入哈希表中,再遍历字符串,判断存储的次数是否为1,若为1,则返回索.原创 2021-10-08 14:59:28 · 70 阅读 · 0 评论 -
2021-10-08
重复的DNA序列所有 DNA 都由一系列缩写为 ‘A’,‘C’,‘G’ 和 ‘T’ 的核苷酸组成,例如:“ACGAATTCCG”。在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助。编写一个函数来找出所有目标子串,目标子串的长度为 10,且在 DNA 字符串 s 中出现次数超过一次。提示:0 <= s.length <= 105s[i] 为 ‘A’、‘C’、‘G’ 或 ‘T’示例 1:输入:s = “AAAAACCCCCAAAAACCCCCCAAAAAGGGT.原创 2021-10-08 14:07:23 · 72 阅读 · 0 评论 -
2021-10-07
字符串中的单词数统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符。请注意,你可以假定字符串里不包括任何不可打印的字符。示例:输入: “Hello, my name is John”输出: 5解释: 这里的单词是指连续的不是空格的字符,所以 “Hello,” 算作 1 个单词。过程解析:选择两个指针:当i移动到第一个非空格处,j移动到第一个空格处时,之间的即为一个单词。class Solution { public int countSegments(String s.原创 2021-10-07 16:31:29 · 82 阅读 · 0 评论 -
2021-10-06
第三大的数给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。提示:1 <= nums.length <= 104-231 <= nums[i] <= 231 - 1示例 1:输入:[3, 2, 1]输出:1解释:第三大的数是 1 。示例 2:输入:[1, 2]输出:2解释:第三大的数不存在, 所以返回最大的数 2 。示例 3:输入:[2, 2, 3, 1]输出:1解释:注意,要求返回第三大的数,是指在所有不同数字中排第.原创 2021-10-06 16:49:59 · 52 阅读 · 0 评论 -
2021-10-05
买卖股票的最佳时机给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。提示:1 <= prices.length <= 1050 <= prices[i] <= 104示例 1:输入:[7,1,5,3,6,4]输出:5.原创 2021-10-05 20:11:22 · 57 阅读 · 0 评论 -
2021-10-05
两个数组的交集 II给定两个数组,编写一个函数来计算它们的交集。说明:输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。我们可以不考虑输出结果的顺序。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2,2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[4,9]解析过程:首先对两个数组进行排序,然后将两个数组的指针所指向的元素进行比较,如果相等,则将结果先存入一个动态数组中,.原创 2021-10-05 19:19:42 · 88 阅读 · 0 评论 -
2021-09-29
合并两个有序数组给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。提示:nums1.length.原创 2021-09-29 20:36:51 · 53 阅读 · 0 评论 -
2021-09-28
最大子序和给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。(提示:1 <= nums.length <= 3 * 104;-105 <= nums[i] <= 105)示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。示例 2:输入:nums = [1]输出:1示例 3:输入:nums = [0]输出:0示例 .原创 2021-09-28 21:33:22 · 42 阅读 · 0 评论 -
2021-09-28
删除有序数组中的重复项给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。(提示:0 <= nums.length <= 3 * 104;-104 <= nums[i] <= 104;nums 已按升序排列)说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入.原创 2021-09-28 20:56:47 · 41 阅读 · 0 评论 -
2021-09-28
罗马数字转整数罗马数字包含以下七种字符: 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 + .原创 2021-09-28 20:19:05 · 41 阅读 · 0 评论 -
2021-09-27
实现 strStr()实现 strStr() 函数。给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。说明:当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。(提示:0 <= h.原创 2021-09-27 20:54:30 · 86 阅读 · 0 评论 -
2021-09-26
两整数之和给你两个整数 a 和 b ,不使用 运算符 + 和 - ,计算并返回两整数之和。(提示:-1000 <= a, b <= 1000)示例 1:输入:a = 1, b = 2输出:3示例 2:输入:a = 2, b = 3输出:5解析过程:首先需要将两个数转为二进制形式,并对两个数进行异或运算(^),相当于不进位相加;之后对两个数进行位与运算(&),然后左移一位,相当于进位;再将上述两步结果相加;最后重复1,2步,直到进位为0,可得出最终结果。.原创 2021-09-26 18:51:25 · 40 阅读 · 0 评论 -
2021-09-18
x 的平方根给你一个非负整数 x ,计算并返回 x 的 平方根 。由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。(提示:0 <= x <= 231 - 1)示例 1:输入:x = 4输出:2示例 2:输入:x = 8输出:2解释:8 的平方根是 2.82842…, 由于返回类型是整数,小数部分将被舍去。具体解析过程:需要调用math函数class Solu.原创 2021-09-18 18:29:42 · 75 阅读 · 0 评论 -
2021-09-17
移除元素给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。(提示:0 <= nums.length <= 100;0 <= nums[i] <= 50;0 <= val <= 100)说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是.原创 2021-09-17 20:43:29 · 49 阅读 · 0 评论 -
2021-09-15
两数之和给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。(提示:2 <= nums.length <= 104;-109 <= nums[i] <= 109;-109 <= target <= 109;只会存在一个有效答案)示例 1:输入:nums = [2,.原创 2021-09-15 13:00:50 · 47 阅读 · 0 评论