![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
LeetCode
分享LeetCode上的一些经典的题目,希望对大家有所帮助。
我还年轻呀
减肥ing,多刷刷算法题就不饿了!
展开
-
力扣【518】零钱兑换II
题目:给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。示例 1:输入: amount = 5, coins = [1, 2, 5]输出: 4解释: 有四种方式可以凑成总金额:5=55=2+2+15=2+1+1+15=1+1+1+1+1示例 2:输入: amount = 3, coins = [2]输出: 0解释: 只用面额2的硬币不能凑成总金额3。示例 3:输入: amount = 10, coins =..原创 2021-05-26 15:39:48 · 208 阅读 · 0 评论 -
力扣【377】组合总和 Ⅳ
题目:给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。题目数据保证答案符合 32 位整数范围。示例 1:输入:nums = [1,2,3], target = 4输出:7解释:所有可能的组合为:(1, 1, 1, 1)(1, 1, 2)(1, 2, 1)(1, 3)(2, 1, 1)(2, 2)(3, 1)请注意,顺序不同的序列被视作不同的组合。示例 2:输入.原创 2021-05-25 23:17:52 · 243 阅读 · 0 评论 -
力扣【322】零钱兑换
题目:给定不同面额的硬币 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 = 0输出:0示...原创 2021-05-25 16:51:57 · 186 阅读 · 0 评论 -
力扣【494】目标和
题目:给你一个整数数组 nums 和一个整数 target 。向数组中的每个整数前添加'+' 或 '-' ,然后串联起所有整数,可以构造一个 表达式 :例如,nums = [2, 1] ,可以在 2 之前添加 '+' ,在 1 之前添加 '-' ,然后串联起来得到表达式 "+2-1" 。返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。示例 1:输入:nums = [1,1,1,1,1], target = 3输出:5解释:一共有 5 种方法让..原创 2021-05-21 17:07:44 · 318 阅读 · 0 评论 -
力扣【416】分割等和子集
题目:给你一个 只包含正整数 的 非空 数组nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。示例 1:输入:nums = [1,5,11,5]输出:true解释:数组可以分割成 [1, 5, 5] 和 [11] 。示例 2:输入:nums = [1,2,3,5]输出:false解释:数组不能分割成两个元素和相等的子集。题解:(快速对齐快捷键:Ctrl + Alt + L)01背包问题——能不能装满容量为target的背包本..原创 2021-05-19 22:03:19 · 196 阅读 · 0 评论 -
力扣【300】最长递增子序列
题目:给你一个整数数组 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,.原创 2021-05-16 22:05:23 · 100 阅读 · 0 评论 -
力扣【279】完全平方数
题目:给定正整数n,找到若干个完全平方数(比如1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。给你一个整数 n ,返回和为 n 的完全平方数的最少数量 。完全平方数是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。示例1:输入:n = 12输出:3解释:12 = 4 + 4 + 4示例 2:输入:n = 13输出:2解释:1...原创 2021-05-16 11:21:33 · 190 阅读 · 0 评论 -
力扣【236】二叉树的最近公共祖先
题目:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”示例 1:输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出:3解释:节点 5 和节点 1 的最近公共祖先是节点 3 。示例 2:输入:root = [3,5,1,6.原创 2021-05-14 18:06:30 · 149 阅读 · 1 评论 -
力扣【207】课程表
题目:你这个学期必须选修 numCourses 门课程,记为0到numCourses - 1 。在选修某些课程之前需要一些先修课程。 先修课程按数组prerequisites 给出,其中prerequisites[i] = [ai, bi] ,表示如果要学习课程ai 则 必须 先学习课程bi 。例如,先修课程对[0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1 。请你判断是否可能完成所有课程的学习?如果可以,返回 true ;否则,返回 false 。示例...原创 2021-05-11 16:56:11 · 154 阅读 · 0 评论 -
力扣【394】字符串解码
题目:给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像3a或2[4]的输入。示例 1:输入:s = "3[a]2[bc]"输出:"aaabcbc"示...原创 2021-05-09 15:30:42 · 147 阅读 · 0 评论 -
力扣【121】买卖股票的最佳时机
题目:给定一个数组 prices ,它的第i 个元素prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 1:输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。...原创 2021-05-09 14:30:10 · 62 阅读 · 0 评论 -
力扣【139】单词拆分
题目:给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入: s = "leetcode", wordDict = ["leet", "code"]输出: true解释: 返回 true 因为 "leetcode" 可以被拆分成 "leet code"。示例 2:输入: s = "applepenapple", word.原创 2021-05-08 23:34:47 · 378 阅读 · 0 评论 -
力扣【85】最大矩形
题目:给定一个仅包含0和1、大小为rows x cols的二维二进制矩阵,找出只包含1的最大矩形,并返回其面积。示例 1:输入:matrix = [["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]]输出:6解释:最大矩形如上图所示。题解:...原创 2021-05-08 18:21:20 · 177 阅读 · 0 评论 -
力扣【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题解:import java.util.*;class Solution { .原创 2021-05-04 20:28:07 · 160 阅读 · 1 评论 -
力扣【225】用队列实现栈
题目:请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通队列的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。题解:package test;import java.util.LinkedList;import原创 2021-03-11 21:02:51 · 94 阅读 · 0 评论 -
力扣【51】N皇后
题目:n皇后问题 研究的是如何将 n个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数 n ,返回所有不同的n皇后问题 的解决方案。每一种解法包含一个不同的n 皇后问题 的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。示例 1:输入:n = 4输出:[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]解释:如上图所示,4 皇后问题存在两个不同的解法。示例...原创 2021-02-24 15:54:13 · 150 阅读 · 0 评论 -
力扣【438】找到字符串中所有字母异位词
题目:给定一个字符串s和一个非空字符串p,找到s中所有是p的字母异位词的子串,返回这些子串的起始索引。字符串只包含小写英文字母,并且字符串s和 p的长度都不超过 20100。说明:字母异位词指字母相同,但排列不同的字符串。不考虑答案输出的顺序。示例1:输入:s: "cbaebabacd" p: "abc"输出:[0, 6]解释:起始索引等于 0 的子串是 "cba", 它是 "abc" 的字母异位词。起始索引等于 6 的子串是 "bac", 它是...原创 2021-02-24 09:54:29 · 140 阅读 · 0 评论 -
力扣【437】路径总和 III
题目:给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。示例:root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8 10 / \ 5 -3 / \ \ 3 2 ...原创 2021-02-23 19:19:01 · 187 阅读 · 0 评论 -
力扣【460】根据身高重建队列
题目:假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。请你重新构造并返回输入数组people 所表示的队列。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。示例 1:输入:people = [[7,..原创 2021-02-23 15:41:49 · 83 阅读 · 0 评论 -
力扣【347】前 K 个高频元素
题目:给定一个非空的整数数组,返回其中出现频率前k高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]题解:使用HashMap小知识:快速对齐快捷键是Ctrl+Alt+Limport java.util.*;//快速对齐快捷键是Ctrl+Alt+Lclass Solution { public int[] topKFrequent(in...原创 2021-02-23 10:58:35 · 101 阅读 · 1 评论 -
力扣【338】比特位计数
题目:给定一个非负整数num。对于0 ≤ i ≤ num 范围中的每个数字i,计算其二进制数中的 1 的数目并将它们作为数组返回。示例 1:输入: 2输出: [0,1,1]示例2:输入: 5输出: [0,1,1,2,1,2]题解:就是计算二进制中1的个数import java.util.*;class Solution { public int[] countBits(int num) { int[] res = new int[num +...原创 2021-02-23 09:48:27 · 86 阅读 · 0 评论 -
力扣【240】搜索二维矩阵 II
题目:编写一个高效的算法来搜索mxn矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。示例 1:输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5输出:true题解:这个人的思路可以的:import java.util.*;clas...原创 2021-02-22 22:50:54 · 127 阅读 · 0 评论 -
力扣【238】除自身以外数组的乘积
题目:给你一个长度为n的整数数组nums,其中n > 1,返回输出数组output,其中 output[i]等于nums中除nums[i]之外其余各元素的乘积。示例:输入: [1,2,3,4]输出: [24,12,8,6]题解:方法一:乘积 = 当前数左边的乘积 * 当前数右边的乘积import java.util.*;class Solution { public int[] productExceptSelf(int[] nums...原创 2021-02-22 22:10:29 · 126 阅读 · 0 评论 -
力扣【581】最短无序连续子数组
题目:给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。请你找出符合题意的 最短 子数组,并输出它的长度。示例 1:输入:nums = [2,6,4,8,10,9,15]输出:5解释:你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。示例 2:输入:nums = [1,2,3,4]输出:0示例 3:输入:nums = [1]输出:0题解:直接用排序,然.原创 2021-02-22 19:35:58 · 105 阅读 · 0 评论 -
力扣【647】回文子串
题目:给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。示例 1:输入:"abc"输出:3解释:三个回文子串: "a", "b", "c"示例 2:输入:"aaa"输出:6解释:6个回文子串: "a", "a", "a", "aa", "aa", "aaa"题解:中心扩展法:这是一个比较巧妙的方法,实质的思路和动态规划的思路类似。比如对一个字符串 ababa,选择最中间.原创 2021-02-22 17:44:16 · 132 阅读 · 0 评论 -
力扣【739】每日温度
题目:请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用0 来代替。例如,给定一个列表temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是[1, 1, 4, 2, 1, 1, 0, 0]。提示:气温 列表长度的范围是[1, 30000]。每个气温的值的均为华氏度,都是在[30, 100]范围内的整数。题解:import jav...原创 2021-02-22 16:32:54 · 90 阅读 · 0 评论 -
力扣【560】和为k的子数组
题目:给定一个整数数组和一个整数k,你需要找到该数组中和为k的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。题解:暴力一:O(N2)class Solution { public int subarraySum(int[] nums, int k) { int count = 0; for (int start = 0; start <...原创 2021-02-22 12:03:54 · 92 阅读 · 0 评论 -
力扣【124】二叉树中的最大路径和
题目:路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root ,返回其 最大路径和 。示例 1:输入:root = [1,2,3]输出:6解释:最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6示例 2:输入:root = [-10,9,20,null,.原创 2021-02-22 10:25:18 · 203 阅读 · 0 评论 -
力扣【136】只出现一次的数字
题目:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例2:输入: [4,1,2,1,2]输出: 4题解:方法一:HashMapimport java.util.*;class Solution { public int singleNumber(int[] nums) { .原创 2021-02-21 14:57:30 · 78 阅读 · 0 评论 -
力扣【84】柱状图中最大的矩形
题目:给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为[2,1,5,6,2,3]。图中阴影部分为所能勾勒出的最大矩形面积,其面积为10个单位。示例:输入: [2,1,5,6,2,3]输出: 10题解:方法一:暴力法一:(从左往右遍历)import java.util.*;class Solution {...原创 2021-02-20 22:05:01 · 113 阅读 · 0 评论 -
力扣【76】最小覆盖子串
题目:给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。注意:如果 s 中存在这样的子串,我们保证它是唯一的答案。示例 1:输入:s = "ADOBECODEBANC", t = "ABC"输出:"BANC"示例 2:输入:s = "a", t = "a"输出:"a"题解:滑动窗口,使用map来初始化每一个字符出现的次数。然后使用滑动窗口寻找包含字符串的最短字符串。.原创 2021-02-20 17:01:17 · 197 阅读 · 0 评论 -
力扣【4】寻找两个正序数组的中位数
题目:给定两个大小为 m 和 n 的正序(从小到大)数组nums1 和nums2。请你找出并返回这两个正序数组的中位数。进阶:你能设计一个时间复杂度为 O(log (m+n)) 的算法解决此问题吗?示例 1:输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2示例 2:输入:nums1 = [1,2], nums2 = [3,4]输出:2.50000解释:合并数组 = [1,2,3,4] ,中位...原创 2021-02-20 14:17:33 · 87 阅读 · 0 评论 -
力扣【461】汉明距离
题目:两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。注意:0 ≤ x, y < 231.示例:输入: x = 1, y = 4输出: 2解释:1 (0 0 0 1)4 (0 1 0 0) ↑ ↑上面的箭头指出了对应二进制位不同的位置。题解:import java.util.*;class Solution { public int hamming...原创 2021-01-02 22:25:45 · 94 阅读 · 0 评论 -
力扣【448】找到所有数组中消失的数字
题目:给定一个范围在1 ≤ a[i] ≤ n (n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。示例:输入:[4,3,2,7,8,2,3,1]输出:[5,6]题解:import java.util.*;class Solution { public List<Integer> findDisappearedNumbers(int[] nums) {...原创 2021-01-02 21:53:00 · 108 阅读 · 0 评论 -
力扣【198】打家劫舍
题目:你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。示例...原创 2020-12-23 10:59:53 · 82 阅读 · 0 评论 -
力扣【543】二叉树的直径
题目:给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。示例 :给定二叉树 1 / \ 2 3 / \ 4 5 返回3, 它的长度是路径 [4,2,1,3] 或者[5,2,1,3]。注意:两结点之间的路径长度是以它们之间边的数目表示。题解:import java.util.Arra...原创 2020-12-13 12:56:18 · 142 阅读 · 1 评论 -
力扣【226】翻转二叉树
题目:翻转一棵二叉树。示例:输入: 4 / \ 2 7/ \ / \1 3 6 9输出: 4 / \ 7 2/ \ / \9 6 3 1题解:class Solution { public TreeNode invertTree(TreeNode root) { //边界条件 if (root == null) { r...原创 2020-12-13 11:28:25 · 112 阅读 · 0 评论 -
力扣【234】回文链表
题目:请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true题解:双指针import java.util.ArrayList;import java.util.*;class ListNode { int val; ListNode next; ListNode(int x) { val = x; }}class Solution {原创 2020-12-13 11:27:58 · 84 阅读 · 0 评论 -
力扣【283】移动零
题目:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。题解:双指针class Solution { public void moveZeroes(int[] nums) { int n = nums.length, left = 0, right = 0;原创 2020-12-13 11:27:29 · 127 阅读 · 0 评论 -
力扣【221】最大正方形
题目:在一个由'0'和'1'组成的二维矩阵内,找到只包含'1'的最大正方形,并返回其面积。示例 1:输入:matrix = [["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]]输出:4题解:方法一:暴力import java.util.*;class Solution { public int maximalSquare(char...原创 2020-12-12 22:31:57 · 185 阅读 · 0 评论