leetcode
oj...
执子手 吹散苍茫茫烟波
这个作者很懒,什么都没留下…
展开
-
leetcode704.二分查找
一.题目描述给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例 1:输入: nums = [-1,0,3,5,9,12], target = 9输出: 4解释: 9 出现在 nums 中并且下标为 4示例 2:输入: nums = [-1,0,3,5,9,12], target = 2输出: -1解释: 2 不存在 nums 中因此返回 -1提示:你可以假设 n原创 2021-08-29 18:21:57 · 353 阅读 · 0 评论 -
leetcode82.删除排序链表的重复元素Ⅱ
一.题目描述存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。返回同样按升序排列的结果链表。提示:链表中节点数目在范围 [0, 300] 内-100 <= Node.val <= 100题目数据保证链表已经按升序排列二.题目解析和leetcode83题(重复节点只保留一个)不同,本题要求删除全部重复元素,代码在83基础上改动一下即可https://blog.csdn.net/xun_zh原创 2021-08-29 16:06:43 · 178 阅读 · 0 评论 -
leetcode83.删除排序链表中的重复元素
一.题目描述存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。返回同样按升序排列的结果链表。提示:链表中节点数目在范围 [0, 300] 内-100 <= Node.val <= 100题目数据保证链表已经按升序排列二.题目解析public ListNode deleteDuplicates2(ListNode head) { /*一趟遍历法,时间O(n),空间O(1) 单指针法-删原创 2021-08-28 21:50:43 · 107 阅读 · 0 评论 -
leetcode110.平衡二叉树
一.题目描述给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。提示:树中的节点数在范围 [0, 5000] 内-104 <= Node.val <= 104二.题目解析public boolean isBalanced(TreeNode root) { /*根据二叉平衡树定义 "一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1"原创 2021-08-25 20:48:16 · 103 阅读 · 0 评论 -
leetcode104.二叉树的最大深度
一.题目描述给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回它的最大深度 3 。二.题目解析public int maxDepth(TreeNode root) { /*递归算法-深度优先搜索dfs 时间O(n),空间O(h) * */原创 2021-08-24 22:14:13 · 140 阅读 · 0 评论 -
leetcode94.二叉树的中序遍历
一.题目描述给定一个二叉树的根节点 root ,返回它的 中序 遍历。提示:树中节点数目在范围 [0, 100] 内-100 <= Node.val <= 100进阶: 递归算法很简单,你可以通过迭代算法完成吗?二.题目解析public List<Integer> inorderTraversal(TreeNode root) { /*递归算法 时间复杂度O(n),空间复杂度O(h) * */ Lis原创 2021-08-24 21:40:01 · 126 阅读 · 0 评论 -
leetcode103- 二叉树的锯齿形层序遍历
一.题目描述给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回锯齿形层序遍历如下:[[3],[20,9],[15,7]]二.题目解析这个题目实际上是leetcode102题的变形:https://blog.csdn.net/xun_zhao_t521/article/details/119879199原创 2021-08-24 20:43:34 · 131 阅读 · 0 评论 -
leetcode102.二叉树的层序遍历
一.题目描述给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7],3/ 9 20/ 15 7返回其层序遍历结果:[[3],[9,20],[15,7]]二.题目解析public List<List<Integer>> levelOrder1(TreeNode root) { /*迭代-广度优先搜索 利用队原创 2021-08-23 22:32:10 · 208 阅读 · 0 评论 -
leetcode518.爬楼梯
一.题目描述假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1 阶 + 1 阶 + 1 阶1 阶 + 2 阶2 阶 + 1 阶二.题目解析1.递归public int climbStairs1(int n) {原创 2021-08-21 21:47:37 · 138 阅读 · 0 评论 -
leetcode198.打家劫舍
一.题目描述你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4 。示例 2:输入:[2原创 2021-08-21 21:09:18 · 114 阅读 · 0 评论 -
leetcode62.不同路径
一.题目描述一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?示例 1:输入:m = 3, n = 7输出:28示例 2:输入:m = 3, n = 2输出:3解释:从左上角开始,总共有 3 条路径可以到达右下角。向右 -> 向下 -> 向下向下 -> 向下 -> 向右向下 -> 向原创 2021-08-21 20:06:17 · 95 阅读 · 0 评论 -
leetcode221.最大正方形
一.题目描述在一个由 ‘0’ 和 ‘1’ 组成的二维矩阵内,找到只包含 ‘1’ 的最大正方形,并返回其面积。输入:matrix = [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,“1”,“1”],[“1”,“0”,“0”,“1”,“0”]]输出:4输入:matrix = [[“0”,“1”],[“1”,“0”]]输出:1输入:matrix = [[“0”]]输出:0提示:m == matrix.lengthn == m原创 2021-08-20 21:07:21 · 238 阅读 · 0 评论 -
leetcode64.最小路径和
一.题目描述给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。输入:grid = [[1,3,1],[1,5,1],[4,2,1]]输出:7解释:因为路径 1→3→1→1→1 的总和最小。示例 2:输入:grid = [[1,2,3],[4,5,6]]输出:12二.题目解析1.记忆化递归public int minPathSum(int[][] grid) { retu原创 2021-08-19 22:24:31 · 223 阅读 · 0 评论 -
leetcode322.零钱兑换
一.题目描述给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。你可以认为每种硬币的数量是无限的。示例 1:输入:coins = [1, 2, 5], amount = 11输出:3解释:11 = 5 + 5 + 1示例 2:输入:coins = [2], amount = 3输出:-1示例 3:输入:coins = [1], amount原创 2021-08-19 21:07:51 · 258 阅读 · 0 评论 -
leetcode1143.最长公共子序列
一.题目描述给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。示例 1:输入:text1 = “abcde”, text2原创 2021-08-18 19:37:06 · 124 阅读 · 0 评论 -
leetcode718.最长重复子数组
一.题目描述给两个整数数组 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] < 100二.题目解析1.暴力法public int findLength1(int[] nums1, int[] nums2) { /原创 2021-08-17 18:00:07 · 166 阅读 · 0 评论 -
leetcode121.买卖股票的最佳时机
一.题目描述给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 1:输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不原创 2021-08-16 19:51:02 · 96 阅读 · 0 评论 -
leetcode300.最长递增子序列
一.题目描述给你一个整数数组 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 = [7,7,7,7原创 2021-08-16 16:44:58 · 155 阅读 · 0 评论 -
leetcode53.最大子序和
一.题目描述给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例 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示例 4:输入:nums = [-1]输出:-1示例 5:输入:nums = [-100000]输出:-100000提示:1 &原创 2021-08-15 21:04:48 · 125 阅读 · 0 评论 -
排序奇升偶降链表
一.题目描述给定一个奇数位升序,偶数位降序的链表,将其重新排序。输入: 1->8->3->6->5->4->7->2->NULL输出: 1->2->3->4->5->6->7->8->NULL二.题目解析1.分别是拆分链表,反转链表,合并两个有序链表三个问题的结合/** 排序奇升偶降链表: 给定一个奇数位升序,偶数位降序的链表,将其重新排序为升序链表。 */public class Solut原创 2021-08-13 21:10:15 · 1063 阅读 · 0 评论 -
leetcode148.排序链表
一.题目描述给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。进阶:你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗?输入:head = [4,2,1,3]输出:[1,2,3,4]输入:head = [-1,5,3,4,0]输出:[-1,0,3,4,5]输入:head = []输出:[]提示:链表中节点的数目在范围 [0, 5 * 104] 内-105 <= Node.val <= 105二.题目解析pub原创 2021-08-12 21:54:08 · 118 阅读 · 0 评论 -
leetcode2.两数相加
一.题目描述给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.输入:l1 = [0], l2 = [0]输出:[0]输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]输原创 2021-08-11 16:39:19 · 66 阅读 · 0 评论 -
leetcode19.删除链表的倒数第N个节点
一.题目描述给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。进阶:你能尝试使用一趟扫描实现吗?输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]输入:head = [1], n = 1输出:[]输入:head = [1,2], n = 1输出:[1]提示:链表中结点的数目为 sz1 <= sz <= 300 <= Node.val <= 1001 <= n <= sz二.题目解析1.两趟扫描p原创 2021-08-10 21:57:45 · 95 阅读 · 1 评论 -
leetcode160.相交链表
一.题目描述给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。题目数据 保证 整个链式结构中不存在环。注意,函数返回结果后,链表必须 保持其原始结构 。输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Intersected at ‘8’解释:相交节点的值为 8 (注意,如果两个链表相交则原创 2021-08-10 20:32:43 · 131 阅读 · 0 评论 -
leetcode142.环形链表Ⅱ
一.题目描述给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。进阶:你是否可以使用 O(1) 空间解决此题?输入:head = [3,2,0,-4], pos = 1输出:返回索引为 1 的链表节点解释:链表中有一个环,其尾部连接原创 2021-08-09 22:14:03 · 151 阅读 · 0 评论 -
leetcode141-环形链表
一.题目描述给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。进阶:你能用 O(1)(即,常量)内存解决此问题吗?输入:head = [3,2,0,-4], p原创 2021-08-09 20:42:02 · 102 阅读 · 0 评论 -
leetcode21-合并两个有序链表
一.题目描述将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]输入:l1 = [], l2 = []输出:[]输入:l1 = [], l2 = [0]输出:[0]提示:两个链表的节点数目范围是 [0, 50]-100 <= Node.val <= 100l1 和 l2 均按 非递减顺序 排列二.题目解析public static原创 2021-08-08 22:53:06 · 86 阅读 · 0 评论 -
leetcode234-回文链表
一.题目描述请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?二.题目解析public static boolean isPalindrome(ListNode head) { /*暴力法遍历+栈,时间复杂度O(n),空间复杂度O(n) * */ ListNode原创 2021-08-07 20:46:14 · 95 阅读 · 0 评论 -
leetcode92-反转链表Ⅱ
一.题目描述给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。输入:head = [1,2,3,4,5], left = 2, right = 4输出:[1,4,3,2,5]输入:head = [5], left = 1, right = 1输出:[5]提示:链表中节点数目为 n1 <= n <= 500-500 <= Node.v原创 2021-08-06 21:45:23 · 162 阅读 · 0 评论 -
leetcode206-反转链表
一.题目描述给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]输入:head = [1,2]输出:[2,1]输入:head = []输出:[]提示:链表中节点的数目范围是 [0, 5000]-5000 <= Node.val <= 5000二.题目解析1.递归法public ListNode reverseList1(ListNode head) { /*递归方式,递推原创 2021-08-03 22:16:26 · 91 阅读 · 0 评论 -
leetcode227-基本计算器Ⅱ
一.题目描述给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。整数除法仅保留整数部分。示例 1:输入:s = “3+2*2”输出:7示例 2:输入:s = " 3/2 "输出:1示例 3:输入:s = " 3+5 / 2 "输出:5提示:1 <= s.length <= 3 * 105s 由整数和算符 (’+’, ‘-’, ‘*’, ‘/’) 组成,中间由一些空格隔开s 表示一个 有效表达式表达式中的所有整数都是非负整数,且在范围 [0, 23原创 2021-08-01 21:25:25 · 150 阅读 · 0 评论 -
leetcode14-最长公共前缀
一.题目描述编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入:strs = [“flower”,“flow”,“flight”]输出:“fl”示例 2:输入:strs = [“dog”,“racecar”,“car”]输出:""解释:输入不存在公共前缀。提示:0 <= strs.length <= 2000 <= strs[i].length <= 200strs[i] 仅由小写英文字母组成二.题目解析原创 2021-07-31 20:55:03 · 66 阅读 · 0 评论 -
leetcode125-验证回文串
一.题目描述给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: “A man, a plan, a canal: Panama”输出: true解释:“amanaplanacanalpanama” 是回文串示例 2:输入: “race a car”输出: false解释:“raceacar” 不是回文串提示:1 <= s.length <= 2 * 105字符串 s 由 ASC原创 2021-07-28 21:06:50 · 90 阅读 · 0 评论 -
leetcode5-最长回文子串
一.题目描述给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = “babad”输出:“bab”解释:“aba” 同样是符合题意的答案。示例 2:输入:s = “cbbd”输出:“bb”示例 3:输入:s = “a”输出:“a”示例 4:输入:s = “ac”输出:“a”提示:1 <= s.length <= 1000s 仅由数字和英文字母(大写和/或小写)组成二.题目解析1.暴力法public String longestPalindr原创 2021-07-27 21:33:05 · 88 阅读 · 0 评论 -
leetcode20-有效的括号
一.题目描述给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = “()”输出:true示例 2:输入:s = “()[]{}”输出:true示例 3:输入:s = “(]”输出:false示例 4:输入:s = “([)]”输出:false示例 5:输入:s = “{[]}”输出:true提示:1 <= s.l原创 2021-07-26 22:06:27 · 103 阅读 · 1 评论 -
leetcode3-无重复字符的最长子串
一.题目描述给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: s = “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: s = “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,“pwke”原创 2021-07-26 20:45:08 · 86 阅读 · 0 评论 -
leetcode415-字符串相加&拓展题36进制加法
一.题目描述给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。提示:num1 和num2 的长度都小于 5100num1 和num2 都只包含数字 0-9num1 和num2 都不包含任何前导零你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式二.题目解析public static String addStrings(String num1, String num2) { /*双指针法*/ int i原创 2021-07-25 20:35:08 · 332 阅读 · 0 评论 -
【数组】leetcode215-数组中的第K个最大元素
一.题目描述给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4提示:1 <= k <= nums.length <= 104-104 <= nums[i] <= 104二.题目解析1.暴力法publi原创 2021-07-19 22:11:29 · 467 阅读 · 1 评论 -
leetcode141-环形链表
题目描述给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。输入:head = [1,2], pos = 0输出:true解释:链表中...原创 2020-03-20 11:04:02 · 97 阅读 · 0 评论 -
leetcode21-合并两个有序链表
题目描述将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例输入:1->2->4, 1->3->4输出:1->1->2->3->4->4解题思路1.循环遍历java代码如下:public ListNode mergeTwoLists(ListNode l1, ListNode l2) ...原创 2020-03-19 19:51:31 · 93 阅读 · 0 评论