
LeetCode刷题记录
NJU_lemon
这个作者很懒,什么都没留下…
展开
-
LeetCode 23 合并k个升序链表 题解
LeetCode 23 合并k个升序链表 题解给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例 1:输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[ 1->4->5, 1->3->4, 2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6原创 2021-10-29 20:51:46 · 277 阅读 · 0 评论 -
LeetCode 22 括号生成 题解
LeetCode 22 括号生成 题解数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例 1:输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]示例 2:输入:n = 1输出:["()"]提示:1 <= n <= 8代码:class Solution { List<String> res = new ArrayList<>();原创 2021-10-29 20:50:02 · 2713 阅读 · 0 评论 -
LeetCode 21 合并两个有序链表 题解
LeetCode 21 合并两个有序链表 题解将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * Li原创 2021-10-29 20:48:40 · 144 阅读 · 0 评论 -
LeetCode 20 有效的括号 题解
LeetCode 20 有效的括号 题解给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = "()"输出:true示例 2:输入:s = "()[]{}"输出:true示例 3:输入:s = "(]"输出:false示例 4:输入:s = "([)]"输出:false示例 5:输入:s = "{[]}"输出:true原创 2021-10-29 20:46:34 · 140 阅读 · 0 评论 -
LeetCode 15 三数之和 题解
LeetCode 15 三数之和 题解给你一个包含 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]]示例 2:输入:nums = []输出:[]示例 3:输入:nums = [0]输出:[]提示:0 <= nums.length原创 2021-10-29 20:45:02 · 285 阅读 · 0 评论 -
LeetCode 560 和为k的子数组 题解
LeetCode 560 和为k的子数组 题解给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明 :数组的长度为 [1, 20,000]。数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。代码:class Solution { public int subarraySum(int原创 2021-10-29 20:40:40 · 515 阅读 · 0 评论 -
LeetCode 724 寻找数组中心索引 题解
LeetCode 724 寻找数组中心索引 题解给你一个整数数组 nums,请编写一个能够返回数组 “中心索引” 的方法。数组 中心索引 是数组的一个索引,其左侧所有元素相加的和等于右侧所有元素相加的和。如果数组不存在中心索引,返回 -1 。如果数组有多个中心索引,应该返回最靠近左边的那一个。注意:中心索引可能出现在数组的两端。示例 1:输入:nums = [1, 7, 3, 6, 5, 6]输出:3解释:中心索引是 3 。左侧数之和 (1 + 7 + 3 = 11),右侧数之和 (5原创 2021-10-29 20:31:03 · 3282 阅读 · 0 评论 -
LeetCode 628 三个数的最大乘积 题解
LeetCode 628 三个数的最大乘积 题解给你一个整型数组 nums ,在数组中找出由三个数组成的最大乘积,并输出这个乘积。示例 1:输入:nums = [1,2,3]输出:6示例 2:输入:nums = [1,2,3,4]输出:24示例 3:输入:nums = [-1,-2,-3]输出:-6 提示:3 <= nums.length <= 104-1000 <= nums[i] <= 1000代码:class Solution { pub原创 2021-10-29 20:29:31 · 148 阅读 · 0 评论 -
LeetCode 445 两数相加II 题解
LeetCode 445 两数相加II 题解区别于第二题给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。进阶:如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。示例:输入:(7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 8 -> 0 -> 7代码:原创 2021-10-29 20:28:20 · 136 阅读 · 0 评论 -
LeetCode 167 两数之和II 题解
LeetCode 167 两数之和II 题解给定一个已按照 升序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 1 开始计数 ,所以答案数组应当满足 1 <= answer[0] < answer[1] <= numbers.length 。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示例 1:输入:numbers原创 2021-10-29 20:25:38 · 107 阅读 · 0 评论 -
LeetCode 547 省份数量 题解
LeetCode 547 省份数量 题解有 n 个城市,其中一些彼此相连,另一些没有相连。如果城市 a 与城市 b 直接相连,且城市 b 与城市 c 直接相连,那么城市 a 与城市 c 间接相连。省份 是一组直接或间接相连的城市,组内不含其他没有相连的城市。给你一个 n x n 的矩阵 isConnected ,其中 isConnected[i][j] = 1 表示第 i 个城市和第 j 个城市直接相连,而 isConnected[i][j] = 0 表示二者不直接相连。返回矩阵中 省份 的数量。原创 2021-10-28 10:42:33 · 644 阅读 · 0 评论 -
LeetCode 399 除法求值 题解
LeetCode 399 除法求值 题解给你一个变量对数组 equations 和一个实数值数组 values 作为已知条件,其中 equations[i] = [Ai, Bi] 和 values[i] 共同表示等式 Ai / Bi = values[i] 。每个 Ai 或 Bi 是一个表示单个变量的字符串。另有一些以数组 queries 表示的问题,其中 queries[j] = [Cj, Dj] 表示第 j 个问题,请你根据已知条件找出 Cj / Dj = ? 的结果作为答案。返回 所有问题的答案原创 2021-10-28 10:21:55 · 3925 阅读 · 0 评论 -
LeetCode 509 斐波那契数 题解
LeetCode 509 斐波那契数 题解斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) = 0,F(1) = 1F(n) = F(n - 1) + F(n - 2),其中 n > 1给你 n ,请计算 F(n) 。class Solution { public int fib(int n) { if (n < 2) { return原创 2021-10-28 10:20:25 · 133 阅读 · 0 评论 -
LeetCode 263 & 264 丑数 题解
LeetCode 263 & 264 丑数 题解263编写一个程序判断给定的数是否为丑数。丑数就是只包含质因数 2, 3, 5 的正整数。示例 1:输入: 6输出: true解释: 6 = 2 × 3代码:class Solution { public boolean isUgly(int num) { if(num == 0 ){ return false; } while(num % 2 == 0原创 2021-10-28 10:17:01 · 107 阅读 · 0 评论 -
LeetCode 11 盛最多水的容器 题解
LeetCode 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]。在此情况下,容器能够容纳水(表示为蓝色部分)原创 2021-10-28 10:14:27 · 177 阅读 · 0 评论 -
LeetCode 135 分发糖果 题解
LeetCode 135 分发糖果 题解老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。你需要按照以下要求,帮助老师给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。评分更高的孩子必须比他两侧的邻位孩子获得更多的糖果。那么这样下来,老师至少需要准备多少颗糖果呢?示例 1:输入:[1,0,2]输出:5解释:你可以分别给这三个孩子分发 2、1、2 颗糖果。示例 2:输入:[1,2,2]输出:4解释:你可以分别给这三个孩子分发 1、2、1原创 2021-10-28 10:10:25 · 283 阅读 · 0 评论 -
LeetCode 9 回文数 题解
LeetCode 9 回文数 题解给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。示例 1:输入:x = 121输出:true示例 2:输入:x = -121输出:false解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入:x = 10输入:x = 10输出:false解释:从右向左读, 为 01 。因此它不是一个回文数。示例 4:输入:x = -101输出:false提示:原创 2021-10-28 09:44:48 · 134 阅读 · 0 评论 -
LeetCode 1704 判断字符串的两半是否相等 题解
LeetCode 1704 判断字符串的两半是否相等 题解给你一个偶数长度的字符串 s 。将其拆分成长度相同的两半,前一半为 a ,后一半为 b 。两个字符串 相似 的前提是它们都含有相同数目的元音('a','e','i','o','u','A','E','I','O','U')。注意,s 可能同时含有大写和小写字母。如果 a 和 b 相似,返回 true ;否则,返回 false 。示例 1:输入:s = "book"输出:true解释:a = "bo" 且 b = "ok" 。a 中有 1原创 2021-10-28 09:34:14 · 248 阅读 · 0 评论 -
LeetCode 455 分发饼干 题解
LeetCode 455 分发饼干 题解假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。示例 1:输入: g = [1,2,3], s = [1,1]输出: 1解释: 你有三个孩原创 2021-10-27 16:24:34 · 557 阅读 · 0 评论 -
LeetCode 958 二叉树的完全性检验 题解
LeetCode 958 二叉树的完全性检验 题解给定一个二叉树,确定它是否是一个完全二叉树。百度百科中对完全二叉树的定义如下:若设二叉树的深度为 h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。(注:第 h 层可能包含 1~ 2h 个节点。)示例 1:输入:[1,2,3,4,5,6]输出:true解释:最后一层前的每一层都是满的(即,结点值为 {1} 和 {2,3} 的两层),且最后一层中的所有结点({4,5原创 2021-10-27 16:23:22 · 206 阅读 · 0 评论 -
LeetCode 3 无重复字符的最长子串 题解
LeetCode 3 无重复字符的最长子串 题解LeetCode 链接给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: s = "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: s = "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长原创 2021-10-27 16:21:22 · 121 阅读 · 0 评论 -
LeetCode 35 搜索插入位置 题解
LeetCode 35 搜索插入位置 题解给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0代码二分class Solution { public int sea原创 2021-10-27 16:18:27 · 137 阅读 · 0 评论 -
LeetCode 34 在排序数组中查找元素的第一个和最后一个位置 题解
LeetCode 34 在排序数组中查找元素的第一个和最后一个位置 题解给定一个按照升序排列的整数数组 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], targe原创 2021-10-27 16:15:58 · 154 阅读 · 0 评论 -
LeetCode 440 字典序的第k小数字 题解
LeetCode 440 字典序的第k小数字 题解给定整数 n 和 k,找到 1 到 n 中字典序第 k 小的数字。注意:1 ≤ k ≤ n ≤ 109。示例 :输入:n: 13 k: 2输出:10解释:字典序的排列是 [1, 10, 11, 12, 13, 2, 3, 4, 5, 6, 7, 8, 9],所以第二小的数字是 10。代码:参考class Solution { public int findKthNumber(int n, int k) {原创 2021-10-27 11:51:55 · 274 阅读 · 0 评论 -
LeetCode 96 不同的二叉搜索树 题解
LeetCode 96 不同的二叉搜索树 题解给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?示例:输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \原创 2021-10-27 11:26:40 · 190 阅读 · 0 评论 -
LeetCode 413 等差数列划分 题解
LeetCode 413 等差数列划分 题解如果一个数列至少有三个元素,并且任意两个相邻元素之差相同,则称该数列为等差数列。例如,以下数列为等差数列:1, 3, 5, 7, 97, 7, 7, 73, -1, -5, -9以下数列不是等差数列。1, 1, 2, 5, 7 数组 A 包含 N 个数,且索引从0开始。数组 A 的一个子数组划分为数组 (P, Q),P 与 Q 是整数且满足 0<=P<Q<N 。如果满足以下条件,则称子数组(P, Q)为等差数组:元素 A[P]原创 2021-10-27 11:20:05 · 147 阅读 · 0 评论 -
LeetCode 56 合并区间 题解
LeetCode 56 合并区间 题解以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。示例 1:输入:intervals = [[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入:inter原创 2021-10-27 11:15:53 · 118 阅读 · 0 评论 -
LeetCode 57 插入区间 题解
LeetCode 57 插入区间 题解给出一个无重叠的 ,按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。示例 1:输入:intervals = [[1,3],[6,9]], newInterval = [2,5]输出:[[1,5],[6,9]]示例 2:输入:intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]输出:[[1,2]原创 2021-10-27 11:12:01 · 139 阅读 · 0 评论 -
LeetCode 88 合并两个有序数组 题解
LeetCode 88 合并两个有序数组 题解给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。示例 1:输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]示例原创 2021-10-26 15:02:23 · 100 阅读 · 0 评论 -
LeetCode 199 二叉树的右视图 题解
LeetCode 199 二叉树的右视图 题解给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例:输入: [1,2,3,null,5,null,4]输出: [1, 3, 4]解释: 1 <--- / \2 3 <--- \ \ 5 4 <---代码:bfs:每一层最右边的节点O(n);O(n)dfs:先根节点,然后右子树,然后左子树,原创 2021-10-26 15:00:22 · 179 阅读 · 0 评论 -
LeetCode 146 LRU缓存机制 题解
LeetCode 146 LRU缓存机制 题解运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。实现 LRUCache 类:LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。void put(int key, int value) 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。当原创 2021-10-26 14:56:10 · 160 阅读 · 0 评论 -
LeetCode 781 森林中的兔子 题解
LeetCode 781 森林中的兔子 题解森林中,每个兔子都有颜色。其中一些兔子(可能是全部)告诉你还有多少其他的兔子和自己有相同的颜色。我们将这些回答放在 answers 数组里。返回森林中兔子的最少数量。示例:输入: answers = [1, 1, 2]输出: 5解释:两只回答了 "1" 的兔子可能有相同的颜色,设为红色。之后回答了 "2" 的兔子不会是红色,否则他们的回答会相互矛盾。设回答了 "2" 的兔子为蓝色。此外,森林中还应有另外 2 只蓝色兔子的回答没有包含在数组中。原创 2021-10-26 11:53:31 · 195 阅读 · 0 评论 -
LeetCode 128 最长连续序列 题解
LeetCode 128 最长连续序列 题解给定一个未排序的整数数组 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 <= 105-1原创 2021-10-26 11:51:57 · 242 阅读 · 0 评论 -
LeetCode 165 比较版本号 题解
LeetCode 165 比较版本号 题解给你两个版本号 version1 和 version2 ,请你比较它们。版本号由一个或多个修订号组成,各修订号由一个 '.' 连接。每个修订号由 多位数字 组成,可能包含 前导零 。每个版本号至少包含一个字符。修订号从左到右编号,下标从 0 开始,最左边的修订号下标为 0 ,下一个修订号下标为 1 ,以此类推。例如,2.5.33 和 0.1 都是有效的版本号。比较版本号时,请按从左到右的顺序依次比较它们的修订号。比较修订号时,只需比较 忽略任何前导零后的整数值原创 2021-10-26 11:49:41 · 147 阅读 · 0 评论 -
LeetCode 215 数组中的第k个最大元素 题解
LeetCode 215 数组中的第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说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。1.硬排序class Solution { public int findKthLa原创 2021-10-26 11:48:10 · 199 阅读 · 0 评论 -
LeetCode 160 相交链表 题解
LeetCode 160 相交链表 题解编写一个程序,找到两个单链表相交的起始节点。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,原创 2021-10-26 10:46:22 · 144 阅读 · 0 评论 -
LeetCode 105 从前序与中序遍历序列构造二叉树 题解
LeetCode 105 从前序与中序遍历序列构造二叉树 题解根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7代码:class Solution { private Map<Integer, Integer> index原创 2021-10-26 10:44:28 · 137 阅读 · 0 评论 -
LeetCode 460 LFU缓存 题解
LeetCode 460 LFU缓存 题解请你为 最不经常使用(LFU)缓存算法设计并实现数据结构。实现 LFUCache 类:LFUCache(int capacity) - 用数据结构的容量 capacity 初始化对象int get(int key) - 如果键存在于缓存中,则获取键的值,否则返回 -1。void put(int key, int value) - 如果键已存在,则变更其值;如果键不存在,请插入键值对。当缓存达到其容量时,则应该在插入新项之前,使最不经常使用的项无效。在此问题原创 2021-10-26 10:28:30 · 167 阅读 · 0 评论 -
LeetCode 112 路径总和 题解
LeetCode 112 路径总和 题解给你二叉树的根节点 root 和一个表示目标和的整数 targetSum ,判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。叶子节点 是指没有子节点的节点。示例 1:输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22输出:true示例 2:输入:root = [1,2,3], targetSum = 5输出原创 2021-10-25 12:04:12 · 430 阅读 · 0 评论 -
LeetCode 200 岛屿数量 & 463 岛屿的周长 & 695 岛屿的最大面积 题解
LeetCode 200 岛屿数量 & 463 岛屿的周长 & 695 岛屿的最大面积 题解200 岛屿数量dfs:bfs:463 岛屿的周长695 岛屿的最大面积200 岛屿数量给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:grid = [ ["1","1","1","1","0"], ["1"原创 2021-10-25 11:57:35 · 190 阅读 · 0 评论