![](https://img-blog.csdnimg.cn/direct/75fe46618cd940c7b0aaf9fb3ee9c0a6.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
leetcode热题100
文章平均质量分 86
leetcode热题100题解,大家一起进步啊
晓宜
西北小镇做题家 兼 携程Javaer
阿里云专家博主 csdn优质创作者
博客收获4000+收藏,3000+点赞
简历‖面试‖毕设‖程序设计
展开
-
leetcode热题100.最长有效括号(双向遍历解法)
今天给大家带来一道leetcode经典题,最长有效括号,本文将介绍双向遍历解法,希望对你有所帮助。给你一个只包含'('和')'的字符串,找出最长有效(格式正确且连续)括号子串的长度。原创 2024-07-28 10:54:04 · 721 阅读 · 0 评论 -
leetcode热题100.最长有效括号(动态规划完结篇)
今天给大家带来一道leetcode经典题,最长有效括号,本文将介绍动态规划解法解法,希望对你有所帮助。给你一个只包含'('和')'的字符串,找出最长有效(格式正确且连续)括号子串的长度。原创 2024-07-28 10:48:08 · 352 阅读 · 0 评论 -
leetcode热题100.分割等和子集(动态规划)
我选择使用动态规划的方法来解题。我们需要判断是否可以将数组分割成两个子集,使得这两个子集的和相等。这个问题可以转化为在数组中找到一个子集,使得其和等于数组总和的一半。原创 2024-07-17 08:36:14 · 446 阅读 · 0 评论 -
leetcode热题100.乘积最大子数组(动态规划进阶)
给你一个整数数组nums,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。测试用例的答案是一个32-位整数。原创 2024-07-17 08:27:01 · 377 阅读 · 0 评论 -
leetcode热题100.最长递增子序列(动态规划大成)
haloe大家好,今天给大家分享一道动态规划的常考题,经常出现在大厂面试手撕过程中。给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续 子数组 (该子数组中至少包含一个数字),并返回该子数组所对应的乘积。测试用例的答案是一个 32-位 整数。原创 2024-07-16 08:44:24 · 290 阅读 · 0 评论 -
leetcode热题100.单词拆分(动态规划进阶)
最近参加工作比较忙,抽出时间分享一篇题解,希望对大伙有帮助🎈🎈今天分享一道动态规划的题目,大家快刷起来吧🦾🦾Problem:给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true。注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。示例 1:输入: s = “leetcode”, wordDict = [“leet”, “code”]输出: true。原创 2024-07-12 09:00:00 · 1177 阅读 · 0 评论 -
leetcode热题100.零钱兑换(动态规划)
今天给大家分享一道动态规划的常考题,零钱兑换,很有趣的动态规划题目,希望可以对大家找工作过程中起到帮助,帮助大家拓展下思维给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。你可以认为每种硬币的数量是无限的。示例 1:输入:输出:3 解释:11 = 5 + 5 + 1示例 2:输入:coins = [2], amount = 3 输出:-1。原创 2024-07-07 14:09:40 · 804 阅读 · 0 评论 -
leetcode热题100.完全平方数(动态规划进阶)
给你一个整数 n ,返回 和 为 n 的完全平方数的最少数量 。完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。原创 2024-05-22 22:18:43 · 713 阅读 · 0 评论 -
leetcode热题100.打家劫舍(动态规划进阶)
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:示例 2:这是动态规划中的典型的“选与不选”的问题我们先讨论一般的情况,对于小偷而言,在偷取的过程中,每面临一个房子,小偷都有选和不选两种选择。对于小偷而言,此时的最优解是从两种情况中选一种,由这样的情况我们定原创 2024-04-20 09:49:21 · 646 阅读 · 0 评论 -
leetcode热题100.杨辉三角(动态规划入门)
示例 1:示例 2:我们可以根据题意,很轻松的发现这样一个规律:对于第i行,这一行的第一个数和最后一个数都是1,对于这中间的数,设这个数为 row[i][j] ,那么他的值其实可以用下面的公式推导出来:row[i][j]=row[i−1][j]+row[i−1][j−1]row[i][j] = row[i-1][j] + row[i-1][j-1]row[i][j]=row[i−1][j]+row[i−1][j−1]如果单纯的看金字塔的话可能不是很直观,我这里给大家画一个图,更加直观一点根据这样的关系,原创 2024-04-20 08:45:00 · 1166 阅读 · 1 评论 -
leetcode热题100.爬楼梯(从二进制到快速幂)
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?示例 1:示例 2:在上一讲中,我们讲解了递归和动态规划的求解思路,但是我们发现这两种方案的时间复杂度都为 o(n)o(n)o(n),我们试图找一种更加优秀的时间复杂度的解法这里我们就要介绍快速幂的概念了我们先将n表现为2进制,例如3133^{13}313 = 311013^{1101}31101 = 383^838 * 343^434 * 333因为n有 ⌊log2n⌋\lfloor log原创 2024-04-13 18:33:00 · 1303 阅读 · 0 评论 -
leetcode热题100.爬楼梯(从递归到动态规划)
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?示例 1:示例 2:假设 n=8,我们可以分情况讨论:综上所述,设f(n)为到达第层的方法数,则f(8)=f(7)+f(6)f(8) = f(7) + f(6)f(8)=f(7)+f(6)我们推广一下得到这样的公式:f(n)=f(n−1)+f(n−2)f(n) = f(n-1) + f(n-2)f(n)=f(n−1)+f(n−2)递归的出口为 f(1) = 1,f(0) = 0我们先用原创 2024-04-13 17:52:01 · 1023 阅读 · 0 评论 -
leetcode热题100.划分字母区间
给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s 。返回一个表示每个字符串片段的长度的列表。示例 1:示例 2:由于同一个字母只能出现在同一个片段,显然一个字母出现的最后一个位置也在这个片段中;题目中要求我们尽可能多的划分片段,所以每当我们确定了这个位置可以包含此位置之前的所有字母,那么我们一定要进行划分,这样划分数量才能最大例如下图,在a后面切一刀才能保证最大分割具体做法:我们先计算每个原创 2024-04-09 15:15:00 · 566 阅读 · 0 评论 -
leetcode热题100.接雨水
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例 1:示例 2:提示:我们来看示例1中的数据, [0,1,0,2,1,0,1,3,2,1,2,1],如下图我们考虑一种简单的思路,就是一个柱子一个柱子算,比如,对于位置2,即0而言,这个柱子中可以存的水量是 max(l,r)−height[2]max(l,r)-height[2]max(l,r)−height[2] ,其中 l,r代表着这个柱子左边最大的那个柱子的高度和右边最大的柱子的高度,我们不妨先原创 2024-04-08 08:30:00 · 908 阅读 · 0 评论 -
leetcode热题100.盛最多水的容器
给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。说明:你不能倾斜容器。示例 1:示例 2:我们很容易想到计算两个柱子的水容量的公式:ans=min(l,r)∗(r−l)ans = min(l,r)*(r-l)ans=min(l,r)∗(r−l)一种朴素的解法是两层循环,计算每两根柱子之间的容量,保留最大值。这种方法肯定原创 2024-04-08 09:15:00 · 965 阅读 · 0 评论 -
leetcode热题100.跳跃游戏2
给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处:$0原创 2024-04-06 09:52:35 · 1055 阅读 · 0 评论 -
leetcode热题100.跳跃游戏
给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。示例 1:示例 2:提示:1原创 2024-04-03 09:58:43 · 517 阅读 · 0 评论 -
leetcode热题100.数组中的第k大的元素
给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。示例 1:示例 2:我们先把题目做一下转化,求解数组第k大的数,其实就是求解第n-k小的数,根据这一性质,我们可以在函数中直接传入n-k首先,我们可以利用分支的思想解决这个问题,具体思路类似快速排序我们在一次递归中选定最左边的元素,确定他在数组中的位置,如果 j 的位置小等于n-k,说明n-k在j的左原创 2024-04-03 09:51:30 · 1323 阅读 · 0 评论 -
leetcode热题100.买股票的最佳时机
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 1:示例 2:提示:1原创 2024-04-02 13:50:34 · 894 阅读 · 0 评论 -
leetcode热题100.数据流的中位数
中位数是有序整数列表中的中间值。如果列表的大小是偶数,则没有中间值,中位数是两个中间值的平均值。实现 MedianFinder 类:MedianFinder() 初始化 MedianFinder 对象。void addNum(int num) 将数据流中的整数 num 添加到数据结构中。double findMedian() 返回到目前为止所有元素的中位数。与实际答案相差 10-5 以内的答案将被接受。示例 1:输入输出解释提示:我们维护两个堆,一个最大堆,一个最小堆,最大堆维护小于等于中位数的值,最小堆维原创 2024-04-02 09:30:00 · 1127 阅读 · 0 评论 -
leetcode热题100.前k个高频元素
给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。示例 1:示例 2:提示:进阶:你所设计算法的时间复杂度 必须 优于 O(n log n) ,其中 n 是数组大小。原创 2024-04-01 15:00:00 · 989 阅读 · 0 评论 -
leetcode热题100.柱状图中最大的矩形
给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。示例 1:示例 2:对于一根柱子x,其高为h.假如我们知道了他左边的第一根小于他的柱子的位置l和邮编第一个小于的高度的柱子r,那么我们很容易求得他的最大面积为:s=(r−l−1)∗hs = (r-l-1) * hs=(r−l−1)∗h根据这一性质,我们采用单调栈的方法,在栈中保留第一个比当前元素小的元素的索引,所有大于当前元素的索引都将被弹出;如果栈不为空,说明存在这样一原创 2024-03-29 08:15:00 · 1709 阅读 · 0 评论 -
leeetcode热题100.每日温度
给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。示例 1:示例 2:示例 3:先来看顺着遍历,我们从左到右遍历所有字符串,将他们加入到栈中;我们要明白一点,就是当前栈顶元素是已经遍历过的的最近的元素,我们将它的值和此时遍历到的值比较,如果说当前栈顶元素小于现在的遍历的元素,对于当前栈顶元素而言,就找到了离他最近的点的元素,我们更新对应的原创 2024-03-29 09:00:00 · 612 阅读 · 0 评论 -
leetcode热题100.字符串解码
给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。示例 1:示例 2:示例 3:示例 4:提示:使用栈的思想,遇到 [[[ 时用栈来保存当前构造的字符串res和此原创 2024-03-28 09:00:00 · 970 阅读 · 0 评论 -
leetcode热题100.最小栈
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。实现 MinStack 类:示例 1:时间复杂度:空间复杂度:原创 2024-03-28 09:00:00 · 755 阅读 · 1 评论 -
leetcode热题100.有效括号
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括号。示例 1:示例 2:示例 3:复杂度时间复杂度:空间复杂度:原创 2024-03-27 16:00:00 · 468 阅读 · 0 评论 -
leetcode热题100.寻找两个正序数组中的中位数
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。算法的时间复杂度应该为 O(log (m+n)) 。示例 1:示例 2:定义numus1为较小数组,nums2为较大数组假设有一条分界线在两个数组nums1和nums2中这个分界线满足两个条件:性质1:根据这一性质,我们定义分界线左边的元素个数,可以只二分小的那个nums就可以确定分割线的位置性质2:根据这一性质,我们可以写出二分搜索的判断条件,即左上>右下或者左下>右上原创 2024-03-27 16:00:00 · 892 阅读 · 0 评论 -
leetcode热题100.移动零
示例 1:示例 2:根据题意,我们可以直观的想到一种解法,即将所有非零的数字保存到一个数组中,然后我们将nums的前几位的值变为这个数组,后几位赋值0即可但是题目要求所有我们必须在不复制数组的情况下原地对数组进行操作,要求空间复杂度为O(1)O(1)O(1),我们可以采用双指针的思路标记两个指针为left,right,分别意味着0开始的点的下标和非0数组开始的下标一开始,如果当前数字不为0,我们就同时移动两个指针,否则,我们只移动右指针;当我们的右指针right的值再次遇到非0数字的时候,此时lef原创 2024-03-23 08:00:00 · 1041 阅读 · 0 评论 -
leetcode热题100.最长连续序列
给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为 O(n) 的算法解决此问题。示例 1:示例2:但是题目要求我们要时间复杂度 O(n)O(n)O(n),我们考虑另一种解法,对于去重的元素x,如果x-1不在去重后的集合中,说明他是一个增长链的起点,我们只需要计算这个链条的长度即可,最终保存最长的那一条上升链,那就是我们要找的答案。时间复杂度:空间复杂度:原创 2024-03-21 23:58:25 · 1036 阅读 · 0 评论 -
leetcode热题100. 字母异位词分组
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。字母异位词 是由重新排列源单词的所有字母得到的一个新单词。示例 1:示例 2:示例 3:提示:1原创 2024-02-17 22:05:31 · 1166 阅读 · 0 评论 -
leetcode热题100.二叉树中的最大路径和
二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root ,返回其 最大路径和 。示例 1:输入:root = [1,2,3]输出:6解释:最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6示例 2:输入:root = [-10,9,20,null,null,15,7]输出:42解释:最优路径是原创 2024-02-02 17:10:40 · 1129 阅读 · 0 评论 -
leetcode热题100.三数之和
给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]解释:nums[0] + nums[1] + nums[2] = (-1) + 0原创 2024-01-20 15:33:15 · 1130 阅读 · 0 评论 -
leetcode热题100. 二叉树的最近公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 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,2,0,8,null,null原创 2024-01-19 16:15:01 · 952 阅读 · 0 评论 -
leetcode热题100.路径总和 III
给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。示例 1:输入:root = [10,5,-3,3,2,null,11,3,-2,null,1], targetSum = 8输出:3解释:和等于 8 的路径有 3 条,如图所示。示例 2:输入:root = [5,4,8,11,null,13,4,7,2,null,n原创 2024-01-17 23:54:41 · 1188 阅读 · 0 评论 -
leetcode热题100.两数之和
输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] ==给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个。创建一个字典,记录所有已经访问过的数字,遍历所有nums的值,如果当前 target - nums[i]输入:nums = [3,3], target = 6 输出:[0,1]9 ,返回 [0, 1]。整数,并返回它们的数组下标。原创 2024-01-15 23:35:12 · 540 阅读 · 0 评论