![](https://img-blog.csdnimg.cn/202012092116514.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
LeetCode
LeetCode
宇宙超级无敌程序媛
Talk is cheap, show me the code.
展开
-
Leetcode —— 236. 二叉树的最近公共祖先(Java)
题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”示例题解如果root == p || root == q, 那么root节点即为最近公共祖先。 如果不是,则在左右子树...原创 2021-08-29 16:43:44 · 130 阅读 · 0 评论 -
Leetcode —— 226. 翻转二叉树(Java)
题目描述 翻转一棵二叉树。示例题解太简单了 。代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) ...原创 2021-08-29 00:31:50 · 142 阅读 · 0 评论 -
Leetcode —— 200. 岛屿数量(Java)
题目描述 给你一个由'1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例题解 DFS。遍历整个矩阵,当遇到grid[i][j] == '1'时,从此点开始做深度优先搜索dfs,岛屿数count + 1且...原创 2021-08-29 00:24:26 · 350 阅读 · 0 评论 -
Leetcode —— 198. 打家劫舍(Java)
题目描述 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例题解 动态规划。初始数据:...原创 2021-08-28 23:56:26 · 130 阅读 · 0 评论 -
Leetcode —— 剑指 Offer 24. 反转链表(Java)
题目描述 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例题解 自己意会一下就懂了。代码/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; }...原创 2021-08-27 23:26:11 · 128 阅读 · 1 评论 -
Leetcode —— 169. 多数元素(Java)
题目描述 给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于⌊ n/2 ⌋的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例题解 HashMap计算次数。代码class Solution { public int majorityElement(int[] nums) { Map<Integer, ...原创 2021-08-26 23:34:48 · 124 阅读 · 0 评论 -
Leetcode —— 136. 只出现一次的数字(Java)
题目描述 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。示例题解 异或。代码class Solution { public int singleNumber(int[] nums) { int res = nums[0]; for(int i = 1; i < nums.length; i++) { ...原创 2021-08-26 23:05:18 · 91 阅读 · 0 评论 -
Leetcode —— 101. 对称二叉树(Java)
题目描述 给定一个二叉树,检查它是否是镜像对称的。示例题解 太简单了,自己看代码。代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * ...原创 2021-08-26 22:57:36 · 123 阅读 · 0 评论 -
Leetcode —— 48. 旋转图像(Java)
题目描述 给定一个 n×n 的二维矩阵matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。示例题解 先沿对角线翻转,再沿垂直中线翻转。 对角线翻转时遍历矩阵上三角,中线翻转时遍历矩阵左半边。代码class Solution { public void...原创 2021-08-26 22:44:56 · 163 阅读 · 0 评论 -
Leetcode —— 142. 环形链表 II(Java)
题目描述 给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。示例题解 快慢节点不再赘述,理一下数学逻辑。a...原创 2021-08-04 20:04:39 · 104 阅读 · 0 评论 -
Leetcode —— 78. 子集(Java)
题目描述 给你一个整数数组nums,数组中的元素互不相同。返回该数组所有可能的子集(幂集)。解集不能包含重复的子集。你可以按任意顺序返回解集。示例题解 回溯。代码 class Solution { List<List<Integer>> res = new ArrayList<>(); pub...原创 2021-08-04 19:45:10 · 139 阅读 · 0 评论 -
Leetcode —— 75. 颜色分类(Java)
题目描述 给定一个包含红色、白色和蓝色,一共n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、1 和 2 分别表示红色、白色和蓝色。示例题解 其实就是排序嘛。目前看到的性能较高的解法如下,称之为“刷漆法”。 [2 0 2 1 1 1 0]-> [2 2 2 2 2 2 2] 先全填上2-> ...原创 2021-08-03 20:10:48 · 122 阅读 · 0 评论 -
Leetcode —— 64. 最小路径和(Java)
题目描述 给定一个包含非负整数的mxn网格grid,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例题解 动态规划。初始数据动态规划方程代码class Solution { public int minPathSum(int[][] grid) { int m = grid.le...原创 2021-08-02 20:29:05 · 117 阅读 · 0 评论 -
Leetcode —— 139. 单词拆分(Java)
题目描述 给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。示例题解 动态规划。使用一个Boolean数组,tmp[i]表示字符串s的[0, i]是否可以拆分。代码class Solution { public bo...原创 2021-08-02 20:20:32 · 213 阅读 · 0 评论 -
Leetcode —— 141. 环形链表(Java)
题目描述 给定一个未排序的整数数组nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。示例题解 利用HashSet进行去重。 寻找起点连续序列的起点(如果起点数字为a,那么HashSet中必不包含a - 1),依次计算各个起点的连续序列长度,得出最大值。代码class Solution { public int longestConsecutive(int[]...原创 2021-07-16 11:13:25 · 123 阅读 · 0 评论 -
Leetcode —— 114. 二叉树展开为链表(Java)
题目描述 给定一个未排序的整数数组nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。示例题解 利用HashSet进行去重。 寻找起点连续序列的起点(如果起点数字为a,那么HashSet中必不包含a - 1),依次计算各个起点的连续序列长度,得出最大值。代码class Solution { public int longestConsecutive(int[]...原创 2021-07-13 14:48:27 · 182 阅读 · 1 评论 -
Leetcode —— 102. 二叉树的层序遍历(Java)
题目描述 给你一个二叉树,请你返回其按层序遍历得到的节点值。 (即逐层地,从左到右访问所有节点)。示例题解 利用队列。代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(...原创 2021-07-13 11:48:27 · 196 阅读 · 0 评论 -
Leetcode —— 128. 最长连续序列(Java)
题目描述 给定一个未排序的整数数组nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。示例题解 利用HashSet进行去重。 寻找起点连续序列的起点(如果起点数字为a,那么HashSet中必不包含a - 1),依次计算各个起点的连续序列长度,得出最大值。代码class Solution { public int longestConsecutive(int...原创 2021-07-13 00:00:34 · 290 阅读 · 0 评论 -
Leetcode —— 104. 二叉树的最大深度(Java)
题目描述 给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。示例题解 递归。 返回左右子树中较大的深度加一。代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * ...原创 2021-07-12 23:51:51 · 104 阅读 · 0 评论 -
Leetcode —— 94. 二叉树的中序遍历(Java)
题目描述 给定一个二叉树的根节点root,返回它的中序遍历。示例题解 注意List传参是传引用。Java中8种基本类型是值传递(即拷贝出一个同样值的新对象传递过去),其他基本都是引用传递。代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * Tr...原创 2021-07-12 23:45:33 · 125 阅读 · 0 评论 -
Leetcode —— 剑指 Offer 28. 对称的二叉树(Java)
题目描述 请完成一个函数,输入一个二叉树,该函数输出它的镜像。示例题解 递归。代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */c...原创 2021-07-12 23:32:40 · 71 阅读 · 0 评论 -
Leetcode —— 剑指 Offer 27. 二叉树的镜像(Java)
题目描述 请完成一个函数,输入一个二叉树,该函数输出它的镜像。示例题解 递归。代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */cla...原创 2021-07-12 23:19:50 · 103 阅读 · 0 评论 -
Leetcode —— 剑指 Offer 26. 树的子结构(Java)
题目描述 输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。示例题解 首先遍历A子树的节点。 判断A节点是否与B树相同。代码/** * Definition for a binary tree node. * public class TreeNode { * ...原创 2021-07-12 23:11:57 · 96 阅读 · 0 评论 -
Leetcode —— 07. 重建二叉树(Java)
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。示例题解 这道题理解的一般,具体注释详细写在了代码里。代码class Solution { public TreeNode buildTree(int[] preorder, int[] inorder) { HashMap hashMap = new HashMap<In...原创 2021-07-09 00:26:05 · 116 阅读 · 0 评论 -
Leetcode —— 79. 单词搜索(Java)
题目描述 给定一个m x n 二维字符网格board 和一个字符串单词word 。如果word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例题解 做过很多回溯的题目了,但这道题搞了好久,大概是以下几个原因:在回溯与动态规划之间犹豫。 没get到需要先寻找回...原创 2021-07-07 20:44:00 · 286 阅读 · 0 评论 -
Leetcode —— 62. 不同路径(Java)
题目描述 一个机器人位于一个 m x n网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?示例题解 动态规划!机器人只能向右或者向下走一步,那么动态规划公式写为:填充二维数组 返回结果代码class Solution { ...原创 2021-07-07 20:26:42 · 130 阅读 · 0 评论 -
Leetcode —— 49. 字母异位词分组(Java)
题目描述给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例题解 偷懒了,主要利用了Java8中的Stream。 Stream详细用法可参见Java —— Stream的使用代码class Solution { public List<List<String>> groupAnagrams(String[] strs) { Map<St...原创 2021-07-06 23:11:50 · 223 阅读 · 0 评论 -
Leetcode —— 46. 全排列(Java)
题目描述给定一个不含重复数字的数组nums返回其所有可能的全排列。你可以按任意顺序返回答案。示例题解 回溯法,构建树结构,注意剪枝。代码class Solution { List<List<Integer>> res = new ArrayList<>(); public List<List<Integer>> permute(int[] nums) { ...原创 2021-07-06 23:04:45 · 328 阅读 · 0 评论 -
Leetcode —— 34. 在排序数组中查找元素的第一个和最后一个位置(Java)
题目描述给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回[-1, -1]。示例题解 双指针与二分法。双指针解法代码class Solution { public int[] searchRange(int[] nums, int target) { int len = nums.leng...原创 2021-07-06 22:58:01 · 175 阅读 · 0 评论 -
Leetcode —— 39. 组合总和(Java)
题目描述给定一个无重复元素的数组candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。candidates中的数字可以无限制重复被选取。说明:所有数字(包括target)都是正整数。 解集不能包含重复的组合。示例题解使用回溯,用递归控制for循环嵌套的数量! 注意剪枝。代码class Solution { ...原创 2021-07-05 20:07:33 · 223 阅读 · 0 评论 -
Leetcode —— 17. 电话号码的字母组合(Java)
题目描述给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例题解使用回溯,用递归控制for循环嵌套的数量!// 注意一定要新建!!! res.add(new String(now));代码 class Solution { String digits;...原创 2021-07-05 19:58:17 · 196 阅读 · 1 评论 -
Leetcode(剑指 Offer) —— 10- II. 青蛙跳台阶问题(Java)
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例题解青蛙一次可以跳1/2个台阶,那么如果现在是n个台阶,可以在n - 1个台阶跳一阶,或者在n - 2个台阶跳2阶。得出公式如下:F(n) = F(n - 1) + F(n - 2)。与斐波那切数列类似。代码class Solution { publ.原创 2021-06-16 00:33:24 · 230 阅读 · 0 评论 -
Leetcode(剑指 Offer) —— 10- I. 斐波那契数列(Java)
题目描述写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0,F(1)= 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例题解动态规划超基础题目。F(N) = F...原创 2021-06-15 23:41:36 · 111 阅读 · 0 评论 -
Leetcode(剑指 Offer) —— 06. 从尾到头打印链表(Java)
题目描述输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例题解创建一个与链表等大小的int数组。倒序将数字写入。要知道链表的长度,必须先暂存链表头节点,再进行计算,否则链表遍历一次之后,将丢失头节点。代码/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(.原创 2021-06-05 22:33:43 · 85 阅读 · 0 评论 -
Leetcode —— 231. 2 的幂(Java可运行)
题目描述给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。如果存在一个整数 x 使得n == 2x ,则认为 n 是 2 的幂次方。示例题解一、while循环代码class Solution { public boolean isPowerOfTwo(int n) { while (n >= 1) { if (n == 1) { r.原创 2021-06-02 16:45:22 · 106 阅读 · 0 评论 -
Leetcode(剑指 Offer) —— 04. 二维数组中的查找(Java)
题目描述在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例题解仔细观察代码class Solution { public boolean findNumberIn2DArray(int[][] matrix, int target) { int m = matrix.length;原创 2021-05-30 18:22:54 · 80 阅读 · 0 评论 -
Leetcode(剑指 Offer) —— 03. 数组中重复的数字(Java)
题目描述找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3代码HashMap代码class Solution { public int findRepeatNumber(int[] nums) { Map<Integ.原创 2021-05-24 10:07:40 · 118 阅读 · 4 评论 -
Leetcode —— 31. 下一个排列(Java可运行)
题目描述实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。样例输入位于左侧列,其相应输出位于右侧列。 1,2,3 → 1,3,2 3,2,1 → 1,2,3 1,1,5 → 1,5,1代码class Solution { public void nextPermutation(int[]...原创 2020-11-10 22:08:19 · 199 阅读 · 0 评论 -
Leetcode —— 973. 最接近原点的 K 个点(Java可运行)
题目描述我们有一个由平面上的点组成的列表 points。需要从中找出 K 个距离原点 (0, 0) 最近的点。(这里,平面上两点之间的距离是欧几里德距离。)你可以按任何顺序返回答案。除了点坐标的顺序之外,答案确保是唯一的。示例 1:输入:points = [[1,3],[-2,2]], K = 1 输出:[[-2,2]] 解释: (1, 3) 和原点之间的距离为 sqrt(10), (-2, 2) 和原点之间的距离为 sqrt(8...原创 2020-11-09 22:20:23 · 235 阅读 · 0 评论 -
Leetcode —— 941. 有效的山脉数组(Java可运行)
题目描述给定一个整数数组A,如果它是有效的山脉数组就返回true,否则返回 false。让我们回顾一下,如果 A 满足下述条件,那么它是一个山脉数组:A.length >= 3 在0 < i< A.length - 1条件下,存在i使得: A[0] < A[1] < ... A[i-1] < A[i] A[i] > A[i+1] > ... > A[A.length - 1]...原创 2020-11-03 19:23:29 · 194 阅读 · 1 评论