
leetcode
lisin-lee-cooper
这个作者很懒,什么都没留下…
展开
-
【leetcode198】打家劫舍
一.问题描述你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4 。二.示例代码publ原创 2022-02-21 11:19:10 · 96 阅读 · 0 评论 -
【leetcode5】最长回文串
一.问题描述给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = “babad”输出:“bab”解释:“aba” 同样是符合题意的答案。二.示例代码public class LongestPalindromeString { public static void main(String[] args) { String palindrome = "babad"; String result = palindromeString2(pa原创 2022-02-17 14:02:54 · 203 阅读 · 0 评论 -
【leetcode143】重排链表
一.问题描述给定一个单链表 L 的头节点 head ,单链表 L 表示为:L0 → L1 → … → Ln - 1 → Ln请将其重新排列后变为:L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → …思路 :1.寻找链表的中间节点2.反转中后部分节点3.合并前后部分节点注意找到中间节点后,需要将找到的mid节点的next节点置为null,不然会形成环。合并两个链表图解二.实例代码public class RearrangeNode { public原创 2022-02-16 16:18:36 · 278 阅读 · 0 评论 -
【leetcode24】两两交换链表中的节点
一.问题描述给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。示例 1:输入:head = [1,2,3,4]输出:[2,1,4,3]二.图解三.示例代码public class SwapPairs { public static void main(String[] args) { ListNode listNode = new ListNode(1); ListN原创 2022-02-11 14:20:50 · 395 阅读 · 0 评论 -
【leetcode86】分割链表
一. 问题描述给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。你应当 保留 两个分区中每个节点的初始相对位置。示例 1:输入:head = [1,4,3,2,5,2], x = 3输出:[1,2,2,4,3,5]二.示例代码public class PartitionLinkedList { public static ListNode partition(ListNode head, int x原创 2021-10-22 18:11:04 · 76 阅读 · 0 评论 -
【leetcode236】二叉树的最近公共祖先
一.问题描述给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]示例 1:输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8输出: 6解释:原创 2021-09-06 15:35:55 · 75 阅读 · 0 评论 -
【leetcode61】旋转链表
一.问题描述给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。输入:head = [1,2,3,4,5], k = 2输出:[4,5,1,2,3]二.示例代码public class RotatingLinkedList61 { public static void main(String[] args) { ListNode listNode1 = new ListNode(1); ListNode listNode2 =原创 2021-09-02 11:34:49 · 80 阅读 · 0 评论 -
【leetcode11】盛最多水的容器
一.问题描述给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。输入:[1,8,6,2,5,4,8,3,7]输出:49解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。二.示例代码public cl原创 2021-08-25 11:32:48 · 78 阅读 · 0 评论 -
【leetcode5】最长回文串
一.问题描述给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = “babad”输出:“bab”解释:“aba” 同样是符合题意的答案。二.示例代码public class LongestPalindromeStr5 { public static void main(String[] args) { String str = "babad"; String result = longestPalindromeStr2(str);原创 2021-08-24 15:38:10 · 76 阅读 · 0 评论 -
【leetcode334】递增的三元子序列
一.问题描述给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。示例 1:输入:nums = [1,2,3,4,5]输出:true解释:任何 i < j < k 的三元组都满足题意二.示例代码public class IncrTernarySubse原创 2021-08-19 11:26:22 · 70 阅读 · 0 评论 -
【leetcode199】二叉树的右视图
一.问题描述给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。输入: [1,2,3,null,5,null,4]输出: [1,3,4]二.示例代码public class BSTRightView199 { public static void main(String[] args) { TreeNode treeNode1 = new TreeNode(1); TreeNode treeNode原创 2021-08-11 17:36:56 · 146 阅读 · 0 评论 -
【leetcode230】二叉树中第K小的元素
一.问题描述给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。输入:root = [3,1,4,null,2], k = 1输出:1二.示例代码public class BSTKth230 { public static void main(String[] args) { TreeNode treeNode = new TreeNode(3); TreeNode treeNode2原创 2021-08-04 15:06:00 · 101 阅读 · 0 评论 -
【leetcode198】打家劫舍
一.问题描述你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4 。二.示例代码publ原创 2021-07-28 15:21:11 · 196 阅读 · 0 评论 -
【leetcode189】旋转数组
一.问题描述给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。进阶:尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗?示例 1:输入: nums = [1,2,3,4,5,6,7], k = 3输出: [5,6,7,1,2,3,4]二.示例代码public class RotateArray189 { public static void main(String[] args) {原创 2021-07-28 14:26:39 · 81 阅读 · 0 评论 -
【leetcode162】寻找峰值
一.问题描述峰值元素是指其值大于左右相邻值的元素。给你一个输入数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。你可以假设 nums[-1] = nums[n] = -∞ 。示例 1:输入:nums = [1,2,3,1]输出:2解释:3 是峰值元素,你的函数应该返回其索引 2。示例 2:输入:nums = [1,2,1,3,5,6,4]输出:1 或 5解释:你的函数可以返回索引 1,其峰值元素为 2;或者返回索引 5, 其原创 2021-07-19 11:52:23 · 80 阅读 · 0 评论 -
【leetcode150】逆波兰表达式求值
一.问题描述有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例 1:输入:tokens = [“2”,“1”,"+",“3”,"*"]输出:9解释:该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9二.示例代码public class InverseExpreEval150 { public stati原创 2021-07-15 11:08:59 · 141 阅读 · 0 评论 -
【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二.示例代码public class LongestContinuousSeq128 {原创 2021-06-30 17:42:24 · 82 阅读 · 0 评论 -
【leetcode103】二叉树的锯齿形层序遍历
一.问题描述给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树 [3,9,20,null,null,15,7],3/ \9 20/ \15 7返回锯齿形层序遍历如下:[[3],[20,9],[15,7]]二.示例代码public class ZLevelBinarySearchTree103 { public static void main(String[原创 2021-06-29 10:28:47 · 81 阅读 · 0 评论 -
【leetcode102】二叉树的层序遍历
一.问题描述给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7],3/ \9 20/ \15 7返回其层序遍历结果:[[3],[9,20],[15,7]]二示例代码public class LevelBinarySearchTree102 { public static void main(String[] args) {原创 2021-06-28 20:12:04 · 73 阅读 · 0 评论 -
【leetcode98】验证二叉搜索树
一.问题描述给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入:2/ \1 3输出: true示例 2:输入:5/ \1 4/ \3 6输出: false解释: 输入为: [5,1,4,null,null,3,6]。原创 2021-06-28 19:40:54 · 67 阅读 · 0 评论 -
【leetcode91】解码方法
一.问题描述一条包含字母 A-Z 的消息通过以下映射进行了 编码 :‘A’ -> 1‘B’ -> 2…‘Z’ -> 26要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如,“11106” 可以映射为:“AAJF” ,将消息分组为 (1 1 10 6)“KJF” ,将消息分组为 (11 10 6)注意,消息不能分组为 (1 11 06) ,因为 “06” 不能映射为 “F” ,这是由于 “6”原创 2021-06-28 17:32:28 · 70 阅读 · 0 评论 -
【leetcode78】子集
一.问题描述给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。示例 1:输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例 2:输入:nums = [0]输出:[[],[0]]二.示例代码public class Subset78 { static List<Integer> t = ne原创 2021-06-28 11:01:52 · 87 阅读 · 0 评论 -
【leetcode73】矩阵置零
一.问题描述给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。进阶:一个直观的解决方案是使用 O(mn) 的额外空间,但这并不是一个好的解决方案。一个简单的改进方案是使用 O(m + n) 的额外空间,但这仍然不是最好的解决方案。你能想出一个仅使用常量空间的解决方案吗?示例 1:输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]输出:[[1,0,1],[0,0,0],[1,0,1]]二.示例代码pu原创 2021-05-24 16:14:18 · 107 阅读 · 0 评论 -
【leetcode62】不同路径
一.问题描述一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?示例 1:https://assets.leetcode.com/uploads/2018/10/22/robot_maze.png输入:m = 3, n = 7输出:28示例 2:输入:m = 3, n = 2输出:3原创 2021-05-24 15:25:41 · 78 阅读 · 0 评论 -
【leetcode55】跳跃游戏
一.问题描述给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。示例 1:输入:nums = [2,3,1,1,4]输出:true解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。二.示例代码public static void main(String[] args) { int[] nums = n原创 2021-05-18 17:54:32 · 192 阅读 · 1 评论 -
【leetcode50】Pow(x,n)
一.问题描述实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。示例 1:输入:x = 2.00000, n = 10输出:1024.00000二.实例代码public static void main(String[] args) { int x = 2, n = 10; System.out.println(pow_x_n(x, n)); } public static double pow_x_n(do原创 2021-05-18 17:12:00 · 68 阅读 · 0 评论 -
【leetcode49】字母异位词分组
一.问题描述给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]输出:[[“ate”,“eat”,“tea”],[“nat”,“tan”],[“bat”]]说明:所有输入均为小写字母。不考虑答案输出的顺序。二.示例代码public static void main(String[] args) {原创 2021-05-15 16:17:21 · 102 阅读 · 0 评论 -
【leetcode48】旋转图像
一.问题描述给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。旋转图像示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[[7,4,1],[8,5,2],[9,6,3]]二.示例代码public static void main(String[] args) { in原创 2021-05-15 15:23:47 · 96 阅读 · 0 评论 -
【leetcode46】全排列
一.问题描述给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。示例 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]]二.示例代码public static void main(String[] args) { int[] nums原创 2021-05-15 14:56:47 · 91 阅读 · 0 评论 -
【leetcode34】在排序数组中查找元素的第一个和最后一个位置
一.问题描述给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。进阶:你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗?示例 1:输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]示例 2:输入:nums = [5,7,7,8,8,10], target = 6输出:[-原创 2021-05-12 17:10:58 · 83 阅读 · 0 评论 -
【leetcode33】搜索旋转排序数组
一.问题描述在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。给你 旋转后 的数组 nums 和一个整数 target ,如果 num原创 2021-05-12 15:44:53 · 74 阅读 · 0 评论 -
【leetcode19】删除链表的倒数第N个节点
一.问题描述给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。https://assets.leetcode.com/uploads/2020/10/03/remove_ex1.jpg进阶:你能尝试使用一趟扫描实现吗?示例 1:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]二.示例代码public static void main(String[] args) { ListNode listNo原创 2021-05-08 10:40:56 · 141 阅读 · 0 评论 -
【leetcode17】电话号码的字母组合
一.问题描述给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例 1:输入:digits = “23”输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]二.示例代码static Map<Character, String> phoneMap = new HashMap<Characte原创 2021-05-01 19:05:14 · 240 阅读 · 0 评论 -
【leetcode15】三数子和
一.问题藐视给你一个包含 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]]二.示例代码public static void main(String[] args) { int[] nums = new原创 2021-05-01 18:45:06 · 127 阅读 · 0 评论 -
【leetcode2】两数相加
一.问题描述给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.二.示例代码public static void main(String[] args) {原创 2021-04-30 18:32:29 · 72 阅读 · 1 评论 -
【leetcode5】最长回文子串
一.问题描述给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = “babad”输出:“bab”解释:“aba” 同样是符合题意的答案。二.示例代码public static void main(String[] args) { String s = "babad"; List<Character> result = longestPalindromicSubStr(s); System.out.printl原创 2021-04-29 00:15:08 · 76 阅读 · 0 评论 -
【leetcode3】无重复字符的最长子串
一.问题描述给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。二.示例代码public static void main(String[] args) { String s = "abcabcbb"; int result = noRepeatLongestSubStr(s); Syste原创 2021-04-28 00:22:38 · 69 阅读 · 0 评论