![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode刷题集
文章平均质量分 67
微光长明
成为一道微光、直到闪耀
展开
-
Day93 前 K 个高频元素
给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案https://leetcode-cn.com/problems/top-k-frequent-elements/示例1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例2:输入: nums = [1], k = 1输出: [1]提示:1 <= nums.length <= 105k 的取值范围是 [1, 数组中不相同的原创 2021-04-30 20:55:43 · 201 阅读 · 1 评论 -
Day92 有序矩阵中第 K 小的元素
给你一个 n x n 矩阵 matrix ,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。请注意,它是 排序后 的第 k 小元素,而不是第 k 个 不同 的元素https://leetcode-cn.com/problems/kth-smallest-element-in-a-sorted-matrix/示例1:1 ,5 , 910,11,1312,13,15输入:matrix = [[1,5,9],[10,11,13],[12,13,15]], k = 8输出:13原创 2021-04-29 10:58:45 · 163 阅读 · 0 评论 -
Day91 至少有 K 个重复字符的最长子串
给你一个字符串 s 和一个整数 k ,请你找出 s 中的最长子串, 要求该子串中的每一字符出现次数都不少于 k 。返回这一子串的长度https://leetcode-cn.com/problems/longest-substring-with-at-least-k-repeating-characters/示例1:输入:s = “aaabb”, k = 3输出:3解释:最长子串为 “aaa” ,其中 ‘a’ 重复了 3 次。示例2:输入:s = “ababbc”, k = 2输出:5原创 2021-04-28 23:29:19 · 216 阅读 · 1 评论 -
Day90 课程表 II
##现在你总共有 n 门课需要选,记为 0 到 n-1。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1]给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序,你只要返回一种就可以了。如果不可能完成所有课程,返回一个空数组。https://leetcode-cn.com/problems/course-schedule-ii/示例1:输入: 2, [[1,0]]输出: [0,原创 2021-04-27 10:58:48 · 113 阅读 · 1 评论 -
Day89 四数相加 II
给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0[ 454. 四数相加 II - 力扣(LeetCode) (leetcode-cn.com) ](https://leetcode-cn.com/problems/4sum-ii/)示例1:输入:A = [ 1, 2]B = [-2,-1]C = [-1, 2]D = [ 0, 2]输出:2解释:两个元组如下:(原创 2021-04-26 19:41:35 · 131 阅读 · 0 评论 -
Day88 摆动排序 II
给你一个整数数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]… 的顺序。你可以假设所有输入数组都可以得到满足题目要求的结果。[ 324. 摆动排序 II - 力扣(LeetCode) (leetcode-cn.com) ](https://leetcode-cn.com/problems/wiggle-sort-ii/)**进阶:**你能用 O(n) 时间复杂度和 / 或原地 O(1) 额外空间来实现吗?示例1:输入:n原创 2021-04-25 10:50:02 · 82 阅读 · 0 评论 -
Day87 零钱兑换
##给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。你可以认为每种硬币的数量是无限的。https://leetcode-cn.com/problems/coin-change/示例1:输入:coins = [1, 2, 5], amount = 11输出:3解释:11 = 5 + 5 + 1示例2:输入:coins = [2], amount = 3输出:-1原创 2021-04-24 11:05:08 · 86 阅读 · 0 评论 -
Day86 滑动窗口最大值
给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值https://leetcode-cn.com/problems/sliding-window-maximum/示例1:输入:nums = [1,3,-1,-3,5,3,6,7], k = 3输出:[3,3,5,5,6,7]解释:滑动窗口的位置 最大值[1 3 -1] -3 5原创 2021-04-23 10:44:52 · 145 阅读 · 0 评论 -
Day85 搜索二维矩阵 II
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。https://leetcode-cn.com/problems/search-a-2d-matrix-ii/示例1:1, 4, 7, 11, 152, 5, 8, 12, 193, 6, 9, 16, 2210, 13, 14, 17, 2418, 21, 23, 26, 30输入:matrix = [[1原创 2021-04-22 22:39:12 · 72 阅读 · 0 评论 -
Day41 最小覆盖子串
给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “”https://leetcode-cn.com/problems/minimum-window-substring/注意:如果 s 中存在这样的子串,我们保证它是唯一的答案。示例1:输入:s = “ADOBECODEBANC”, t = “ABC”输出:“BANC”示例2:输入:s = “a”, t = “a”输出:“a”提示:1 &原创 2021-04-21 20:51:12 · 86 阅读 · 0 评论 -
Day84 二叉搜索树中第K小的元素
给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。https://leetcode-cn.com/problems/kth-smallest-element-in-a-bst/**进阶:**如果二叉搜索树经常被修改(插入/删除操作)并且你需要频繁地查找第 k 小的值,你将如何优化算法?示例1: 3 / \ 1 4 \ 2输入:root = [3,1,4,null,原创 2021-04-21 11:17:39 · 187 阅读 · 1 评论 -
Day83 数组中的第K个最大元素
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素https://leetcode-cn.com/problems/kth-largest-element-in-an-array/示例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 ≤ 数组的长度Java解法原创 2021-04-20 10:02:44 · 67 阅读 · 0 评论 -
Day82 课程表
你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中 prerequisites[i] = [ai, bi] ,表示如果要学习课程 ai 则 必须 先学习课程 bi 。例如,先修课程对 [0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1 。请你判断是否可能完成所有课程的学习?如果可以,返回 true ;否则,返回 falsehttps://leetcod原创 2021-04-19 10:19:42 · 70 阅读 · 0 评论 -
Day81 岛屿数量
给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。https://leetcode-cn.com/problems/number-of-islands/示例1:输入:grid = [[“1”,“1”,“1”,“1”,“0”],[“1”,“1”,“0”,“1”,“0”],[“1”,“1”,“0”,“0”,“0”],[“0”,“0”,“0”原创 2021-04-18 22:33:41 · 84 阅读 · 2 评论 -
Day80 打家劫舍
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。https://leetcode-cn.com/problems/house-robber/给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额示例1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 =原创 2021-04-17 23:01:16 · 99 阅读 · 0 评论 -
Day79 旋转数组
##给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗?https://leetcode-cn.com/problems/rotate-array/示例1:输入: nums = [1,2,3,4,5,6,7], k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1原创 2021-04-16 23:44:17 · 81 阅读 · 1 评论 -
Day78 最大数
##给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。https://leetcode-cn.com/problems/largest-number/**注意:**输出结果可能非常大,所以你需要返回一个字符串而不是整数。示例1:输入:nums = [10,2]输出:“210”示例2:输入:nums = [3,30,34,5,9]输出:“9534330”示例3:输入:nums = [1]输出:“1”示例4:输入:nums = [1原创 2021-04-15 23:39:22 · 79 阅读 · 0 评论 -
Day77 寻找峰值
给你一个输入数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可https://leetcode-cn.com/problems/find-peak-element/峰值元素是指其值大于左右相邻值的元素。你可以假设 nums[-1] = nums[n] = -∞ 。 **进阶:**你可以实现时间复杂度为 O(logN) 的解决方案吗?示例1:输入:nums = [1,2,3,1]输出:2解释:3 是峰值元素,你的函数应该返回其索引原创 2021-04-14 10:59:01 · 48 阅读 · 0 评论 -
Day76 乘积最大子数组
给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积https://leetcode-cn.com/problems/maximum-product-subarray/示例1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。示例2:输入: [-2,0,-1]输出: 0解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。Java解法思路:好像只需要一趟遍历即可,也原创 2021-04-13 10:13:44 · 80 阅读 · 0 评论 -
Day75 逆波兰表达式求值
根据 逆波兰表示法,求表达式的值。有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。https://leetcode-cn.com/problems/evaluate-reverse-polish-notation/示例1:输入:tokens = [“2”,“1”,"+",“3”,"*"]输出:9解释:该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9示例2:输入:tokens = [“4”,“13”,“5”,"/","+"]输原创 2021-04-12 10:14:02 · 194 阅读 · 1 评论 -
Day74 直线上最多的点数
给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上。https://leetcode-cn.com/problems/max-points-on-a-line/示例1:输入: [[1,1],[2,2],[3,3]]输出: 3解释:^|| o| o| o ±------------>0 1 2 3 4示例2:输原创 2021-04-11 22:25:39 · 104 阅读 · 1 评论 -
Day73 排序链表
给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表https://leetcode-cn.com/problems/sort-list/你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗?示例1:输入:head = [4,2,1,3]输出:[1,2,3,4]示例2:输入:head = [-1,5,3,4,0]输出:[-1,0,3,4,5]示例3:输入:head = []输出:[]提示:链表中节点的数目在范围 [0, 5原创 2021-04-10 23:31:46 · 127 阅读 · 2 评论 -
Day71 LRU 缓存机制
运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。实现 LRUCache 类https://leetcode-cn.com/problems/lru-cache/LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。void put(int key, int value) 如果关键字已经存在,则变更其数据值;如果关键字原创 2021-04-08 11:20:25 · 76 阅读 · 2 评论 -
Day70 单词拆分
给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词https://leetcode-cn.com/problems/word-break/示例1:输入: s = “leetcode”, wordDict = [“leet”, “code”]输出: true解释: 返回 true 因为 “leetcode” 可以被拆分成 “leet code”。示例2:输入: s = “applepenapple”, wordDi原创 2021-04-07 10:34:53 · 74 阅读 · 2 评论 -
Day68 分割回文串
给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案https://leetcode-cn.com/problems/palindrome-partitioning/示例1:输入:s = “aab”输出:[[“a”,“a”,“b”],[“aa”,“b”]]示例2:输入:s = “a”输出:[[“a”]]提示:1 <= s.length <= 16s 仅由小写英文字母组成Java解法思路:初步考虑用动态规划原创 2021-04-05 23:03:16 · 96 阅读 · 0 评论 -
Day67 被围绕的区域
给你一个 m x n 的矩阵 board ,由若干字符 ‘X’ 和 ‘O’ ,找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充https://leetcode-cn.com/problems/surrounded-regions/示例1:输入:board = [[“X”,“X”,“X”,“X”],[“X”,“O”,“O”,“X”],[“X”,“X”,“O”,“X”],[“X”,“O”,“X”,“X”]]输出:[[“X”,“X”,“X”,“X”],[“X”,“X”,“原创 2021-04-04 23:01:26 · 124 阅读 · 2 评论 -
Day66 最长连续序列
给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度**进阶:**你可以设计并实现时间复杂度为 O(n) 的解决方案吗?https://leetcode-cn.com/problems/longest-consecutive-sequence/示例1:输入:nums = [100,4,200,1,3,2]输出:4解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。示例2:输入:nums = [0,3,7,原创 2021-04-03 19:39:19 · 91 阅读 · 0 评论 -
Day65 复制带随机指针的链表
给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。构造这个链表的 深拷贝。深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。https://leetcode-cn.com/problems/copy-list-wit原创 2021-04-02 23:51:40 · 46 阅读 · 0 评论 -
Day64 只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素https://leetcode-cn.com/problems/single-number/你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例1:输入: [2,2,1]输出: 1示例2:输入: [2,2,1]输出: 1Java解法思路:比较简单,用Set即可处理package sj.shimmer.algorithm.m4_2021;import原创 2021-04-01 23:07:57 · 40 阅读 · 0 评论 -
Day63 单词接龙
字典 wordList 中从单词 beginWord 和 endWord 的 转换序列 是一个按下述规格形成的序列:序列中第一个单词是 beginWord 。序列中最后一个单词是 endWord 。每次转换只能改变一个字母。转换过程中的中间单词必须是字典 wordList 中的单词。给你两个单词 beginWord 和 endWord 和一个字典 wordList ,找到从 beginWord 到 endWord 的 最短转换序列 中的原创 2021-03-31 21:54:02 · 89 阅读 · 1 评论 -
Day62 验证回文串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写https://leetcode-cn.com/problems/valid-palindrome/将空字符串定义为有效的回文串示例1:输入: “A man, a plan, a canal: Panama”输出: true示例2:输入: “race a car”输出: falseJava解法思路:这个属于很基础的题,使用双指针左右同时遍历即可,注意中间分段间隔,我就是漏掉了 Y到a的中间值导致原创 2021-03-30 20:34:45 · 79 阅读 · 4 评论 -
Day61 二叉树中的最大路径和
给你一个二叉树的根节点 root ,返回其最大路径和https://leetcode-cn.com/problems/binary-tree-maximum-path-sum/路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点路径和 是路径中各节点值的总和。示例1: 1 / \ 2 3输入:root = [1,2,3]输出:6解释:最优路径是原创 2021-03-29 23:13:53 · 68 阅读 · 0 评论 -
Day60 买卖股票的最佳时机II
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii/示例1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。原创 2021-03-28 21:06:30 · 58 阅读 · 0 评论 -
Day59 买卖股票的最佳时机
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/示例1:输入:[7,1,5,3,6,4]输出:5解释:在原创 2021-03-27 22:56:10 · 50 阅读 · 0 评论 -
Day58 杨辉三角
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。https://leetcode-cn.com/problems/pascals-triangle/给定一个非负整数 *numRows,*生成杨辉三角的前 numRows 行。在杨辉三角中,每个数是它左上方和右上方的数的和。示例1:输入: 5输出:[ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1]]Java解法思路:比较简单,每一行都是原创 2021-03-26 20:50:20 · 77 阅读 · 1 评论 -
Day57 填充每个节点的下一个右侧节点指针
给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node/你只能使用常量级额外空间。使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间复杂度。示例1:public class Node { public int val; public Node left; public Node ri原创 2021-03-25 23:29:05 · 61 阅读 · 1 评论 -
Day56 将有序数组转换为二叉搜索树
给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree/示例1:输入:nums = [-10,-3,0,5,9]输出:[0,-3,9,-10,null,5]解释:[0,-10,5,null,-3,null,9] 也将原创 2021-03-24 19:31:32 · 114 阅读 · 0 评论 -
Day55 从前序与中序遍历序列构造二叉树
根据一棵树的前序遍历与中序遍历构造二叉树https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/示例1:注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15原创 2021-03-22 19:36:06 · 141 阅读 · 0 评论 -
Day54 二叉树的最大深度
给定一个二叉树,找出其最大深度。https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例1:给定二叉树 [3,9,20,null,null,15,7], 3/ \9 20/ \15 7返回它的最大深度 3Java解法思路:实际上就是求二叉树的层级可以通过递归的形式返回当前层原创 2021-03-21 22:01:40 · 135 阅读 · 2 评论 -
Day53 二叉树的锯齿形层序遍历
给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal/示例1:给定二叉树 [3,9,20,null,null,15,7], 3/ \9 20/ \15 7返回锯齿形层序遍历如下:[[3],[20,9],[15,7]]Java解法思路:昨天用栈原创 2021-03-20 22:00:26 · 80 阅读 · 0 评论