![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode刷题
文章平均质量分 78
coolshyman
这个作者很懒,什么都没留下…
展开
-
34. 在排序数组中查找元素的第一个和最后一个位置【二分查找】
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], t...原创 2022-04-07 19:51:19 · 354 阅读 · 0 评论 -
5.最长回文子串
5.最长回文子串题目链接:力扣给你一个字符串 s,找到 s 中最长的回文子串。示例 1:*输入:s = "babad"*输出:"bab"*解释:"aba" 同样是符合题意的答案。示例 2:*输入:s = "cbbd"*输出:"bb"示例 3:*输入:s = "a"*输出:"a"示例 4:*输入:s = "ac"*输出:"a"提示:1 <= s.length <= 1000 s 仅由数字和英文字母组成思路:本题和647.回文子串...原创 2022-03-29 10:00:00 · 268 阅读 · 0 评论 -
24. 两两交换链表中的节点
24. 两两交换链表中的节点题目链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs/给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。思路:这道题目正常模拟就可以了。建议使用虚拟头结点,这样会方便很多,要不然每次针对头结点(没有前一个指针指向头结点),还要单独处理。接下来就是交换相邻两个元素了,此时一定要画图,不画图,操作多个指针很.原创 2022-03-26 23:35:19 · 944 阅读 · 0 评论 -
704. 二分查找
704. 二分查找题目链接:https://leetcode-cn.com/problems/binary-search/给定一个n个元素有序的(升序)整型数组nums和一个目标值target ,写一个函数搜索nums中的target,如果目标值存在返回下标,否则返回-1。示例 1:输入: nums = [-1,0,3,5,9,12], target = 9输出: 4解释: 9 出现在 nums 中并且下标为 4示例2:输入: nums...原创 2022-03-25 23:08:45 · 768 阅读 · 0 评论 -
669. 修剪二叉搜索树
669. 修剪二叉搜索树题目链接:https://leetcode-cn.com/problems/trim-a-binary-search-tree/给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。 可以证明,存在 唯一的答案 。所以结果应当返回修剪好的二叉搜索树的新的根节点。注意,根节点可能原创 2022-03-08 23:24:04 · 240 阅读 · 0 评论 -
101.对称二叉树
101.对称二叉树题目地址:https://leetcode-cn.com/problems/symmetric-tree/给你一个二叉树的根节点 root, 检查它是否轴对称。示例1:输入:root = [1,2,2,3,4,4,3]输出:true示例2:输入:root = [1,2,2,null,3,null,3]输出:false思路:首先想清楚,判断对称二叉树要比较的是哪两个节点,要比较的可不是左右节点!对于二叉树是否对称,要比较的是根节点.原创 2022-01-22 12:17:07 · 627 阅读 · 0 评论 -
226.翻转二叉树
226.翻转二叉树题目地址:力扣翻转一棵二叉树。思路:我们之前介绍的都是各种方式遍历二叉树,这次要翻转了,感觉还是有点懵逼。这得怎么翻转呢?如果要从整个树来看,翻转还真的挺复杂,整个树以中间分割线进行翻转,如图:可以发现想要翻转它,其实就把每一个节点的左右孩子交换一下就可以了。关键在于遍历顺序,前中后序应该选哪一种遍历顺序? (一些同学这道题都过了,但是不知道自己用的是什么顺序)遍历的过程中去翻转每一个节点的左右孩子就可以达到整体翻转的效果。**注意只要把每一个原创 2022-01-15 11:44:03 · 357 阅读 · 0 评论 -
二叉树的递归遍历
二叉树的递归遍历:本篇将介绍前后中序的递归写法,一些同学可能会感觉很简单,其实不然,我们要通过简单题目把方法论确定下来,有了方法论,后面才能应付复杂的递归。这里帮助大家确定下来递归算法的三个要素。每次写递归,都按照这三要素来写,可以保证大家写出正确的递归算法!1.确定递归函数的参数和返回值:确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。2.确定终止条件:写完了递归算法,运行的时候,经常会遇到栈溢出的错误...原创 2022-01-09 11:46:28 · 176 阅读 · 0 评论 -
二叉树理论基础
二叉树理论基础二叉树的种类在我们解题过程中二叉树有两种主要的形式:满二叉树和完全二叉树。满二叉树:满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。如图所示:这棵二叉树为满二叉树,也可以说深度为k,有2^k-1个节点的二叉树。完全二叉树:什么是完全二叉树?完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最原创 2022-01-02 12:12:54 · 118 阅读 · 0 评论 -
51.N 皇后【回溯】
51.N 皇后题目链接: 力扣https://leetcode-cn.com/problems/n-queens/n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。给定一个整数 n,返回所有不同的n皇后问题的解决方案。每一种解法包含一个明确的n 皇后问题的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。示例:输入: 4输出: [[".Q..","...Q","Q...","..Q."],["..Q.",...原创 2021-12-25 11:03:11 · 116 阅读 · 0 评论 -
47.全排列 II【回溯】
47.全排列 II题目链接:https://leetcode-cn.com/problems/permutations-ii/给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。示例 1:输入:nums = [1,1,2]输出:[[1,1,2],[1,2,1],[2,1,1]]示例 2:输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]提示:*1 <= nu...原创 2021-12-11 10:48:53 · 467 阅读 · 0 评论 -
46.全排列【回溯】
46.全排列题目链接:https://leetcode-cn.com/problems/permutations/给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]思路:前面已经解决了77.组合问题、131.分割回文串和78.子集问题,接下来看一看排列问题。相信这个排列问题就算是让你用for循环暴力把结果搜索出来,这个暴力也不是很好写。原创 2021-12-04 10:40:31 · 307 阅读 · 0 评论 -
491.递增子序列【回溯】
491.递增子序列题目链接:https://leetcode-cn.com/problems/increasing-subsequences/给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2。示例:输入: [4, 6, 7, 7]输出: [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7, 7], [7,7], [4,7,7]]说明:*给定数组的长度不会超过15。*数组中的整数范围是[-100,...原创 2021-11-27 11:19:06 · 241 阅读 · 1 评论 -
90.子集II【回溯】
90.子集II题目链接:https://leetcode-cn.com/problems/subsets-ii/给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: [1,2,2]输出:[[2],[1],[1,2,2],[2,2],[1,2],[]]思路:做本题之前一定要先做78.子集。这道题目和78.子集区别就是集合里有重复元素了,而且求取的子集要去重。那么关于回溯算法中的去重问题,**在40.组合总原创 2021-11-20 11:44:15 · 614 阅读 · 0 评论 -
78.子集[回溯]
78.子集题目地址:https://leetcode-cn.com/problems/subsets/给定一组不含重复元素的整数数组nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]]思路:如果把子集问题、组合问题、分割问题都抽象为一棵树的话,那么组合问题和分割问题都是收集树的叶子节点,而子集问题是找树的所有节点!其实子集也.原创 2021-11-13 10:58:45 · 126 阅读 · 0 评论 -
93.复原IP地址【回溯】
93.复原IP地址题目地址:https://leetcode-cn.com/problems/restore-ip-addresses/给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。有效的 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。例如:"0.1.2.201" 和 "192.168.1.1" 是 有效的 IP 地址,但是 "0.011.255.245"、"192.168.1.312" 和 "192.16原创 2021-11-06 12:05:18 · 156 阅读 · 0 评论 -
131.分割回文串【回溯】
131.分割回文串题目链接:https://leetcode-cn.com/problems/palindrome-partitioning/给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回 s 所有可能的分割方案。示例:输入:"aab"输出:[["aa","b"],["a","a","b"]]思路:本题这涉及到两个关键问题:1.切割问题,有不同的切割方式2.判断回文相信这里不同的切割方式可以搞懵很多同学了。这种题目,想用for循环暴力解法,可能..原创 2021-10-29 10:39:01 · 240 阅读 · 0 评论 -
40.组合总和II【回溯】
40.组合总和II题目链接:https://leetcode-cn.com/problems/combination-sum-ii/给定一个数组candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。candidates中的每个数字在每个组合中只能使用一次。注意:所有数字(包括目标数)都是正整数。解集不能包含重复的组合。示例1:输入: candidates=[10,1,2,7,6,1,5], target =8,所求解集为:...原创 2021-10-26 11:28:21 · 99 阅读 · 0 评论 -
39. 组合总和【回溯】
39. 组合总和题目链接:https://leetcode-cn.com/problems/combination-sum/给定一个无重复元素的数组candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。candidates中的数字可以无限制重复被选取。说明:*所有数字(包括target)都是正整数。*解集不能包含重复的组合。示例 1:输入:candidates = [2,3,6,7], target = 7,所求...原创 2021-10-21 11:08:41 · 71 阅读 · 0 评论 -
435. 无重叠区间【贪心算法】
435. 无重叠区间题目链接:https://leetcode-cn.com/problems/non-overlapping-intervals/给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意:可以认为区间的终点总是大于它的起点。区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。示例 1:输入: [ [1,2], [2,3], [3,4], [1,3] ]输出: 1解释: 移除 [1,3] 后,剩下的区间没有重叠。示例 2:输入: [原创 2021-10-17 11:06:32 · 71 阅读 · 0 评论 -
763.划分字母区间【贪心算法】
763.划分字母区间题目链接: https://leetcode-cn.com/problems/partition-labels/字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。示例:输入:S = "ababcbacadefegdehijhklij"输出:[9,7,8]解释:划分结果为 "ababcbaca", "defegde", "hijhklij"。每个字母最多出现在一个片段中。像 "aba原创 2021-10-13 11:29:14 · 94 阅读 · 0 评论 -
17.电话号码的字母组合【回溯】
17.电话号码的字母组合题目链接:力扣给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].提示:0 <= digits.length <= 4 digits[i]是范围 ['2', '9']的一个数字。思路:从示例上来说,输入"23"..原创 2021-10-09 11:08:04 · 215 阅读 · 0 评论 -
518. 零钱兑换 II【完全背包】
518.零钱兑换 II链接:https://leetcode-cn.com/problems/coin-change-2/给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。假设每一种面额的硬币有无限个。示例 1:输入: amount = 5, coins = [1, 2, 5]输出: 4解释: 有四种方式可以凑成总金额:5=55=2+2+15=2+1原创 2021-10-05 11:01:09 · 68 阅读 · 0 评论 -
474.一和零【01背包】
474.一和零题目链接:力扣给你一个二进制字符串数组 strs 和两个整数 m 和 n 。请你找出并返回 strs 的最大子集的大小,该子集中 最多 有 m 个 0 和 n 个 1 。如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。示例 1:输入:strs = ["10", "0001", "111001", "1", "0"], m = 5, n = 3输出:4解释:最多有 5 个 0 和 3 个 1 的最大子集是 {"10","0001","1","0"} ,原创 2021-10-01 21:20:00 · 66 阅读 · 0 评论 -
494.目标和【01背包】
494. 目标和题目链接:https://leetcode-cn.com/problems/target-sum/难度:中等给定一个非负整数数组nums和一个目标数target。现在你有两个符号+和-。对于数组中的任意一个整数,你都可以从+或-中选择一个符号添加在前面。返回可以使最终数组和为目标数 target的所有添加符号的方法数。示例:输入:nums=[1, 1, 1, 1, 1], target =3输出:5解释:-1+1+...原创 2021-09-28 12:24:07 · 82 阅读 · 0 评论 -
1049. 最后⼀块⽯头的重量 II【01背包】
1049.最后⼀块⽯头的重量II题目链接:https://leetcode-cn.com/problems/last-stone-weight-ii/题目难度:中等有一堆石头,每块石头的重量都是正整数。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为x 和y,且x <= y。那么粉碎的可能结果如下:如果x == y,那么两块石头都会被完全粉碎;如果x != y,那么重量为x的石头将会完全粉碎,而重量为y的石头新重量为y-x。最后,最多只会剩...原创 2021-09-21 10:59:16 · 92 阅读 · 0 评论 -
416. 分割等和⼦集【01背包】
416. 分割等和⼦集题目链接:https://leetcode-cn.com/problems/partition-equal-subset-sum/题目难易:中等给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意:每个数组中的元素不会超过 100数组的大小不会超过 200示例 1:输入: [1, 5, 11, 5]输出: true解释: 数组可以分割成 [1, 5, 5] 和 [11].示例2:输入: [1, 2, 3, 5]..原创 2021-09-18 11:12:37 · 96 阅读 · 0 评论 -
96.不同的二叉搜索树【动态规划】
96.不同的二叉搜索数题目链接:https://leetcode-cn.com/problems/unique-binary-search-trees/给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?示例1:输入:n = 3输出:5示例2:输入:n = 1输出:1提示:1 <= n <= 19思路:在做这道题之前,需要普及一下什么是二叉搜索树。二叉搜索树是有数值的,二叉搜索树是一个有序树。*若它的左子树不空,.原创 2021-09-15 11:14:48 · 126 阅读 · 0 评论 -
343.整数拆分【动态规划】
343.整数拆分题目链接:https://leetcode-cn.com/problems/integer-break/给定一个正整数n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。示例2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 ×3 ×4 = 36。说明: 你可以假设n不小于 2 且不大于 58。思路:看到这道题目...原创 2021-09-12 11:10:16 · 204 阅读 · 0 评论 -
63. 不同路径 II【动态规划】
63.不同路径 II题目链接:https://leetcode-cn.com/problems/unique-paths-ii/一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。示例 1:输入:obstacleGrid = .原创 2021-09-09 20:45:56 · 187 阅读 · 0 评论 -
62.不同路径【动态规划】
62.不同路径题目链接:https://leetcode-cn.com/problems/unique-paths/一个机器人位于一个 m x n网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?示例 1:输入:m = 3, n = 7输出:28示例 2:输入:m = 2, n = 3输出:3解释:从左上角开始,总共有 3 条路径可以到达右.原创 2021-09-06 10:31:58 · 193 阅读 · 0 评论 -
746. 使用最小花费爬楼梯【动态规划】
746.使用最小花费爬楼梯题目链接:https://leetcode-cn.com/problems/min-cost-climbing-stairs/数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值cost[i](下标从 0 开始)。每当你爬上一个阶梯你都要花费对应的体力值,一旦支付了相应的体力值,你就可以选择向上爬一个阶梯或者爬两个阶梯。请你找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。示例1:输入:cost = [..原创 2021-09-03 10:55:10 · 1336 阅读 · 0 评论 -
216.组合总和III【回溯】
216.组合总和III链接:https://leetcode-cn.com/problems/combination-sum-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]]思...原创 2021-08-31 10:35:15 · 91 阅读 · 0 评论 -
102.⼆叉树的层次遍历
102.⼆叉树的层次遍历题目地址:https://leetcode-cn.com/problems/binary-tree-level-order-traversal/给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7]返回其层序遍历结果:思路:层序遍历一个二叉树。就是从左到右一层一层的去遍历二叉树。需要借用一个辅助数据结构即队列来实现,队列先进先出,符合一.原创 2021-08-28 10:41:28 · 109 阅读 · 0 评论 -
509.斐波那契数【动态规划】
509. 斐波那契数题目地址:https://leetcode-cn.com/problems/fibonacci-number/斐波那契数,通常用F(n) 表示,形成的序列称为 斐波那契数列 。该数列由0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) = 0,F(1)= 1F(n) = F(n - 1) + F(n - 2),其中 n > 1给你n ,请计算 F(n) 。示例 1:输入:2输出:1解释:F(2) = F(1) + F(0) = 1 +...原创 2021-08-25 10:58:02 · 178 阅读 · 0 评论 -
77. 组合【回溯】
77. 组合题目链接:https://leetcode-cn.com/problems/combinations/给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。示例:输入:n = 4, k = 2输出:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],]思路本题这是回溯法的经典题目。直接的解法当然是使用for循环,例如示例中...原创 2021-08-23 11:18:58 · 225 阅读 · 0 评论 -
122.买卖股票的最佳时机II【动态规划】
122.买卖股票的最佳时机II题⽬链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii/给定⼀个数组,它的第 i 个元素是⼀⽀给定股票第 i 天的价格。设计⼀个算法来计算你所能获取的最⼤利润。你可以尽可能地完成更多的交易(多次买卖⼀⽀股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输⼊: [7,1,5,3,6,4]输出: 7解释: 在第2天(股原创 2021-08-21 11:49:05 · 162 阅读 · 0 评论 -
0714.买卖股票的最佳时机含手续费(动态规划)
0714.买卖股票的最佳时机含手续费题目链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/给定一个整数数组prices,其中第i个元素代表了第i天的股票价格;非负整数fee代表了交易股票的手续费用。你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。返回获得利润的最大值。注意:这里的一笔交易指买入持有原创 2021-08-21 11:36:27 · 140 阅读 · 0 评论 -
0714.买卖股票的最佳时机含手续费【贪心算法】
0714.买卖股票的最佳时机含手续费题目链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/给定一个整数数组prices,其中第i个元素代表了第i天的股票价格;非负整数fee代表了交易股票的手续费用。你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。返回获得利润的最大值。注意:这里的一笔交易指买入持.原创 2021-08-21 10:54:49 · 151 阅读 · 0 评论 -
0738.单调递增的数字【贪心算法】
0738.单调递增的数字题目链接:https://leetcode-cn.com/problems/monotone-increasing-digits/给定一个非负整数N,找出小于或等于N的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。(当且仅当每个相邻位数上的数字x和y满足x <= y时,我们称这个整数是单调递增的。)示例 1:输入: N = 10输出: 9示例 2:输入: N = 1234输出: 1234示例 3:输入: N = 332输出: 299原创 2021-08-20 10:00:48 · 153 阅读 · 0 评论