![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode刷题
文章平均质量分 61
大帅比的小跟班
双非水硕在读憨憨一枚。。。
展开
-
力扣 540题 有序数组中的单一元素(史上最快中等题)
540. 有序数组中的单一元素给你一个仅由整数组成的有序数组,其中每个元素都会出现两次,唯有一个数只会出现一次。请你找出并返回只出现一次的那个数。你设计的解决方案必须满足 O(log n) 时间复杂度和 O(1) 空间复杂度。提示:1 <= nums.length <= 105 0 <= nums[i]<= 105解题思路:用0去做 与 运算,O(n)时间复杂度代码和提交结果如下:class Solution { public int .原创 2022-02-14 00:09:49 · 330 阅读 · 0 评论 -
力扣 1763题 最长的美好子字符串(新年快乐)
1763. 最长的美好子字符串当一个字符串 s包含的每一种字母的大写和小写形式 同时出现在 s中,就称这个字符串s是 美好 字符串。比方说,"abABB"是美好字符串,因为'A' 和'a'同时出现了,且'B' 和'b'也同时出现了。然而,"abA"不是美好字符串因为'b'出现了,而'B'没有出现。给你一个字符串s,请你返回s最长的美好子字符串。如果有多个答案,请你返回最早出现的一个。如果不存在美好子字符串,请你返回一个空字符串。...原创 2022-02-01 00:41:30 · 1367 阅读 · 0 评论 -
力扣 2047题 句子中的有效单词数(每日一题)
2047. 句子中的有效单词数句子仅由小写字母('a' 到 'z')、数字('0' 到 '9')、连字符('-')、标点符号('!'、'.' 和 ',')以及空格(' ')组成。每个句子可以根据空格分解成 一个或者多个 token ,这些 token 之间由一个或者多个空格 ' ' 分隔。如果一个 token 同时满足下述条件,则认为这个 token 是一个有效单词:仅由小写字母、连字符或标点(不含数字)。至多一个 连字符 '-' 。如果存在,连字符两侧应当都存在小写字母("a-b" 是一个有原创 2022-01-27 01:07:05 · 411 阅读 · 0 评论 -
力扣 76题 最小覆盖子串(双指针 + 滑动窗口)
76. 最小覆盖子串给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。注意:对于t中重复字符,我们寻找的子字符串中该字符数量必须不少于t中该字符数量。 如果s中存在这样的子串,我们保证它是唯一的答案。提示:1 <= s.length, t.length <= 105 s和t由英文字母组成解题思路:双指针+滑动窗口滑动窗口的思想:用i...原创 2022-01-26 19:56:51 · 978 阅读 · 0 评论 -
力扣 1332题 删除回文子序列
1332. 删除回文子序列给你一个字符串 s,它仅由字母 'a' 和 'b' 组成。每一次删除操作都可以从 s 中删除一个回文 子序列。返回删除给定字符串中所有字符(字符串为空)的最小删除次数。「子序列」定义:如果一个字符串可以通过删除原字符串某些字符而不改变原字符顺序得到,那么这个字符串就是原字符串的一个子序列。「回文」定义:如果一个字符串向后和向前读是一致的,那么这个字符串就是一个回文。解题思路:直接他妈的空串返回 0 ,回文串返回 1 ,啥也不是返回 2 (先删除所有的 .原创 2022-01-22 00:27:36 · 877 阅读 · 0 评论 -
力扣539题 最小时间差
539. 最小时间差给定一个 24 小时制(小时:分钟 "HH:MM")的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。提示:2 <= timePoints.length <= 2 * 104 timePoints[i]格式为"HH:MM"解题思路:① 先将List中的每个字符串转换为一天中对应的分钟数 ② 对分钟数数组进行排序,然后挨个遍历数组中每两个相邻元素的差值,就能得出最小时间差(特别要注意,数组中第一个元素和最...原创 2022-01-18 22:36:51 · 496 阅读 · 0 评论 -
力扣 36题 有效的数独 438题 找到字符串中所有字母异位词
36. 有效的数独请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。数字1-9在每一行只能出现一次。数字1-9在每一列只能出现一次。数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。(请参考示例图)注意:一个有效的数独(部分已被填充)不一定是可解的。只需要根据以上规则,验证已经填入的数字是否有效即可。空白格用'.'表示。提示:1 <= s.length, p.length <= ...原创 2022-01-17 21:43:16 · 186 阅读 · 0 评论 -
力扣382题 链表随机节点
382. 链表随机节点给你一个单链表,随机选择链表的一个节点,并返回相应的节点值。每个节点 被选中的概率一样 。实现 Solution 类:Solution(ListNode head) 使用整数数组初始化对象。int getRandom() 从链表中随机选择一个节点并返回该节点的值。链表中所有节点被选中的概率相等。提示:链表中的节点数在范围[1, 104]内 -104<= Node.val <= 104 至多调用getRandom方法104...原创 2022-01-16 23:16:47 · 74 阅读 · 0 评论 -
力扣334题 递增的三元子序列
334. 递增的三元子序列给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。解题思路:回溯、动态规划、贪心方法一:回溯(超时)这个题类似于之前做过的求数组的递增子序列(长度大于3)的情况,并且只需要返回true和false。代码和提交结果如..原创 2022-01-12 21:32:04 · 267 阅读 · 0 评论 -
力扣hot100 216题组合总和 III 打卡
216. 组合总和 III找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。说明:所有数字都是正整数。解集不能包含重复的组合。示例 1:输入: k = 3, n = 7输出: [[1,2,4]]示例 2:输入: k = 3, n = 9输出: [[1,2,6], [1,3,5], [2,3,4]]解题思路:回溯+剪枝方法一:单纯的回溯,纯暴力,代码和提交结果如下:class Solution {.原创 2022-01-06 00:58:50 · 122 阅读 · 0 评论 -
力扣面试题 08.06. 汉诺塔问题
在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制:(1) 每次只能移动一个盘子;(2) 盘子只能从柱子顶端滑出移到下一根柱子;(3) 盘子只能叠在比它大的盘子上。请编写程序,用栈将所有盘子从第一根柱子移到最后一根柱子。你需要原地修改栈。示例1:输入:A = [2, 1, 0], B = [], C = []输出:C = [2, ..原创 2022-01-04 23:02:51 · 192 阅读 · 0 评论 -
力扣1185题 一周中的第几天
1185. 一周中的第几天给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。输入为三个整数:day、month 和year,分别表示日、月、年。您返回的结果必须是这几个值中的一个{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}。示例 1:输入:day = 31, month = 8, year = 2019输出:"Saturday"示例 2:输入:day..原创 2022-01-03 13:32:38 · 99 阅读 · 0 评论 -
力扣周赛 5967题检查是否所有 A 都在 B 之前 5969题摧毁小行星
5967. 检查是否所有 A 都在 B 之前给你一个 仅 由字符 'a' 和 'b' 组成的字符串s 。如果字符串中 每个 'a' 都出现在 每个 'b' 之前,返回 true ;否则,返回 false 。解题思路:如果想要所有a都出现在所有的b之前,那么我们将字符串转换成字符数组之后,对字符数组进行排序,排序后的结果和原字符数组相比肯定是不变的,如果有变化,则说明原字符串不是所有的a都出现在b之前。代码和提交结果如下:class Solution { public...原创 2022-01-02 19:31:02 · 541 阅读 · 0 评论 -
力扣2022题 将一维数组转变成二维数组
2022. 将一维数组转变成二维数组给你一个下标从 0 开始的一维整数数组 original 和两个整数 m 和 n 。你需要使用 original 中 所有 元素创建一个 m 行 n 列的二维数组。original 中下标从 0 到 n - 1 (都 包含 )的元素构成二维数组的第一行,下标从 n 到 2 * n - 1 (都 包含 )的元素构成二维数组的第二行,依此类推。请你根据上述过程返回一个 m x n 的二维数组。如果无法构成这样的二维数组,请你返回一个空的二维数组。..原创 2022-01-01 19:35:22 · 305 阅读 · 0 评论 -
力扣 hot100 148题排序链表(普通) 打卡
148. 排序链表给你链表的头结点head,请将其按 升序 排列并返回 排序后的链表 。进阶:你可以在O(nlogn) 时间复杂度和常数级空间复杂度下,对链表进行排序吗?示例 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 * 104]内 -105&l...原创 2021-12-20 22:38:26 · 106 阅读 · 0 评论 -
力扣周赛 5956题 找出数组中的第一个回文字符串 5958题 股票平滑下跌阶段的数目 打卡
5956. 找出数组中的第一个回文字符串给你一个字符串数组 words ,找出并返回数组中的 第一个回文字符串 。如果不存在满足要求的字符串,返回一个 空字符串 "" 。回文字符串 的定义为:如果一个字符串正着读和反着读一样,那么该字符串就是一个 回文字符串 。解题思路:就是一个很简单的判断回文串的题,可以借助api reverse方法,也可以自己用双指针写一个判断回文串的方法。代码和提交截图如下图:class Solution { public String firstPal原创 2021-12-19 21:51:19 · 347 阅读 · 0 评论 -
力扣hot100 128题最长连续序列 打卡
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-12-17 20:37:56 · 204 阅读 · 0 评论 -
力扣 剑指 Offer 36. 二叉搜索树与双向链表 打卡
剑指 Offer 36. 二叉搜索树与双向链表输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。为了让您更好地理解问题,以下面的二叉搜索树为例:我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。下图展示了上面的二叉搜索树转化成的链表。“head” 表示指向链表中有最小元素的节点。特别地,我们希望可以原创 2021-12-16 23:03:05 · 150 阅读 · 0 评论 -
力扣hot100 114题二叉树展开为链表 打卡
114. 二叉树展开为链表给你二叉树的根结点 root ,请你将它展开为一个单链表:展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同。解题思路:因为题目告诉我们是与二叉树的先序遍历顺序相同,所以我们可以先对二叉树进行先序遍历,用List存储节点。遍历完成之后,再通过一个虚拟结点依次给root的 rigth 赋值,root的left赋值null。代码及提交截图如下:..原创 2021-12-15 23:35:29 · 865 阅读 · 0 评论 -
力扣hot100 前序、中序、后序组合遍历序列构造二叉树 打卡
106. 从中序与后序遍历序列构造二叉树根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出中序遍历 inorder =[9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树: 3 / \ 9 20 / \ 15 7...原创 2021-12-14 21:02:32 · 275 阅读 · 0 评论 -
力扣hot100 105题从前序与中序遍历序列构造二叉树 打卡
通过先序遍历和中序遍历确定一个二叉树原创 2021-12-13 23:17:25 · 450 阅读 · 0 评论 -
力扣周赛 5934题 找到和最大的长度为 K 的子序列 打卡
5934. 找到和最大的长度为 K 的子序列给你一个整数数组nums和一个整数k。你需要找到nums中长度为 k的 子序列,且这个子序列的和最大。请你返回 任意 一个长度为k的整数子序列。子序列定义为从一个数组里删除一些元素后,不改变剩下元素的顺序得到的数组。示例一:输入:nums = [2,1,3,3], k = 2输出:[3,3]解释:子序列有最大和:3 + 3 = 6 。示例二:输入:nums = [-1,-2,3,4], k = 3输...原创 2021-12-12 22:41:01 · 390 阅读 · 0 评论 -
力扣hot100 139题单词拆分 打卡
139. 单词拆分给你一个字符串 s 和一个字符串列表 wordDict 作为字典,判定s 是否可以由空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。示例一:输入: s = "leetcode", wordDict = ["leet", "code"]输出: true解释: 返回 true 因为 "leetcode" 可以被拆分成 "leet code"。示例二:输入: s = "applepenapple", wordDict = ["apple.原创 2021-12-11 22:08:37 · 449 阅读 · 0 评论 -
力扣hot100 84题柱状图中最大的矩形 打卡
84. 柱状图中最大的矩形给定n个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。解题思路:我们可以遍历数组中的每一个元素,将该元素作为矩形的高,则矩形的长则是两边元素首先小于该元素的位置之间的长度。我们可以直接用暴力的办法,对于每个元素都用循环的方式来找它最左边首先小于它的元素以及最右边首先小于他的元素,但是O(n2)的时间复杂度肯定会超时。方式一:暴力,但是我提交的时候发现只有两组测试用例过...原创 2021-12-10 22:34:53 · 339 阅读 · 0 评论 -
力扣hot100 49题字母异位词分组 打卡
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。提示:1 <= strs.length <= 104 0 <= strs[i].length <= 100 strs[i]仅包含小写字母 思路分析:如何是否属于字母异位词的办法就是将String数组中的所有元素进行排序,然后一样的话则说明是字母异位词。我们可以先对String数组中的所有元素..原创 2021-12-09 22:46:47 · 208 阅读 · 0 评论 -
力扣hot100 98题验证二叉搜索树 打卡
98. 验证二叉搜索树给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。做题分析:验证二叉搜索树,根据二叉搜索树的性质。我们可以知道二叉搜索树经过中序遍历之后得到的结果是递增的,所以我们可以在中序遍历的基础上,利用一个遍历pre用来表示上一个节点的值,如果node.val > pre,就继续,反之返回false;原创 2021-12-08 20:12:20 · 317 阅读 · 0 评论 -
力扣剑指 Offer 51题 数组中的逆序对 打卡
剑指 Offer 51. 数组中的逆序对在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。限制:0 <= 数组长度 <= 50000思路分析:看题目第一眼肯定是暴力,双重for循环count计数来做,但是困难题一般暴力是过不去滴,看到数据量50000也知道O(n2)要超时,这个题的话用归并排序的思想来做,归并排序的同时,记录符合条件的逆序数对,具体的题解可以听左神排序的课,应该是第三节课。方法:归并排序原创 2021-12-07 16:43:27 · 200 阅读 · 0 评论 -
力扣hot100 96题不同的二叉搜索树 打卡
96. 不同的二叉搜索树给你一个整数n,求恰由n个节点组成且节点值从1到n互不相同的二叉搜索树有多少种?返回满足题意的二叉搜索树的种数。输入范围:1 <= n <= 19思路分析:二叉搜索树的特点:每一个节点的左子树上的所有元素大小都小于该节点,右子树上的所有元素大小都大于该节点。按照题意,如果有n个从小到大排列的节点,那么所有的二叉搜索树的个数之和其实就等于,每一个节点做根节点的二叉搜索树之和。而每一个根节点都可以将问题分解为左子树之和*右子树之和。所以我们...原创 2021-12-06 22:06:04 · 249 阅读 · 0 评论 -
力扣hot100 102题二叉树的层序遍历 打卡
2021年11月27日102. 二叉树的层序遍历给你一个二叉树,请你返回其按层序遍历得到的节点值。 (即逐层地,从左到右访问所有节点)。思路分析: 基本的二叉树遍历问题,用队列实现二叉树的层次遍历代码和运行结果:class Solution { public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> ress = ..原创 2021-11-27 20:56:32 · 78 阅读 · 0 评论 -
力扣hot100 79题单词搜索 打卡
2021年11月26日79. 单词搜索给定一个m x n 二维字符网格board 和一个字符串单词word 。如果word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。解题思路:回溯让单元格的每一个格子作为开始去进行判断,然后上下左右不断的递归回溯进行判断代码和运行截图如下:class Solution {...原创 2021-11-26 23:36:22 · 406 阅读 · 0 评论 -
力扣hot100 75题颜色分类 打卡
2021年11月25日75. 颜色分类给定一个包含红色、白色和蓝色,一共n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、1 和 2 分别表示红色、白色和蓝色。思路分析:打眼一看,中等难度,也不知道题目要干啥,但是看了示例就清楚了,这不就是一个简单的排序题,所以上手就是调一个Arrays.sort的API,但是这样做就没什么意思了。本题一共有三个方法解决。方法一:调API,是人都会(一行代码秒中等题的感觉,...原创 2021-11-25 20:46:12 · 439 阅读 · 0 评论 -
力扣hot100 56题合并区间 打卡
2021年11月24日56. 合并区间以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。思路分析:此题的思路是先对原二维数组内部的数据进行排序(排序的依据为每一个区间的左端点),这样整体就会变成如下图所示的样子,在将数组中的第一个区间加入到结果集当中之后。如果下一个区间的左端点小于已经加入到结果集内最后一个区间的右端点,则需要原创 2021-11-24 20:54:30 · 547 阅读 · 0 评论 -
力扣hot100 62题不同路径 打卡
2021年11月23日62. 不同路径一个机器人位于一个 m x n网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?提示:1 <= m, n <= 100 题目数据保证答案小于等于2 * 109题目分析,一般此类最多、最大类型的题目,首先想到的方法就是动态规划,在此题当中,我们可以把网格当作一个二维数组,因为题目规定机...原创 2021-11-23 22:52:02 · 258 阅读 · 0 评论 -
力扣hot100 55题跳跃游戏打卡
2021年11月22日55. 跳跃游戏给定一个非负整数数组nums,你最初位于数组的第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。解题思路:从题目的要求来看做法应该是动态规划或者是贪心算法,此题两种算法均可解决。方法一:贪心算法用数组下标来记录位置的话,我们可以使用一个变量 rightMax 用来记录能够到达数组位置的最大值,通过for循环来不断的修改rightMax的值,一旦for循环中变量 i 走到的位置比目前的right...原创 2021-11-22 21:37:49 · 3038 阅读 · 0 评论 -
力扣hot100 48题旋转图像 打卡
48. 旋转图像给定一个 n×n 的二维矩阵matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。解法分析:如果没有特殊要求,最好想的方法便是创建一个和原二维数组一模一样的新数组,用来存储旋转之后的结果,然后再重新赋值给原数组。时间复杂度是O(n2),但是本题要求原地修改数组,不要创建其他的内存空间,所以只能重新想办法。方法分为两种如下。方法一:先将整个二维数组水平对折,然后在延(左上右...原创 2021-11-21 21:41:27 · 310 阅读 · 0 评论