下一个更大元素I-LeetCode
下一个更大元素I 🎯 问题描述(来源于LeetCode) 描述: nums1 中数字 x 的 下一个更大元素 是指 x 在 nums2 中对应位置 右侧 的 第一个 比 x 大的元素。 给你两个 没有重复元素 的数组 nums1 和 nums2 ,下标从 0 开始计数,其中nums1 是 nums2 的子集。 对于每个 0 <= i < nums1.length ,找出满足 nums1[i] == nums2[j] 的下标 j ,并且在 nums2 确定 nums2[j] 的 下一个更大元素 。如果不存在下一个更大元素,那么本次查询的答案是 -1 。 返回一个长度为 nums1.length 的数组 ans 作为答案,满足 ans[i] 是如上所述的 下一个更大元素 。 说明: 1 <= nums1.length <= nums2.length <= 1000 0 <= nums1[i], nums2[i] <= 104 nums1和nums2中所有整数 互不相同 nums1 中的所有整数同样出现在 nums2 中 ...
每日温度-LeetCode
每日温度 🎯 问题描述(来源于LeetCode) 描述: 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。 说明: 1 <= temperatures.length <= 105 30 <= temperatures[i] <= 100 示例: 示例 1: 12输入: temperatures = [73,74,75,71,69,72,76,73]输出: [1,1,4,2,1,1,0,0] 示例 2: 12输入: temperatures = [30,40,50,60]输出: [1,1,1,0] 💻 解题思路 思路1:单调栈 思路1:代码实现 1234567891011class Solution: def dailyTemperatures(self, temperatures: List[int]) -> List[int]: ...
基本计算器II-LeetCode
基本计算器II 🎯 问题描述(来源于LeetCode) 描述: 给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。 整数除法仅保留整数部分。 你可以假设给定的表达式总是有效的。所有中间结果将在 [-231, 231 - 1] 的范围内。 注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval() 。 说明: 1 <= s.length <= 3 * 105 s 由整数和算符 ('+', '-', '*', '/') 组成,中间由一些空格隔开 s 表示一个 有效表达式 表达式中的所有整数都是非负整数,且在范围 [0, 231 - 1] 内 题目数据保证答案是一个 32-bit 整数 示例: 示例 1: 12输入:s = "3+2*2"输出:7 示例 2: 12输入:s = " 3/2 "输出:1 💻 解题思路 思路1:栈 思路1:代码实现 1234567891011121314151617181920212223class Solution: ...
字符串解码-LeetCode
字符串解码 🎯 问题描述(来源于LeetCode) 描述: 给定一个经过编码的字符串,返回它解码后的字符串。 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。 你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。 此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。 测试用例保证输出的长度不会超过 105。 说明: 1 <= s.length <= 30 s 由小写英文字母、数字和方括号 '[]' 组成 s 保证是一个 有效 的输入。 s 中所有整数的取值范围为 [1, 300] 示例: 示例 1: 12输入:s = "3[a]2[bc]"输出:"aaabcbc" 示例 2: 12输入:s = "3[a2[c]]"输出:"accaccacc" 💻 解题思路 思路1:栈 ...
最小栈-LeetCode
最小栈 🎯 问题描述(来源于LeetCode) 描述: 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。 void push(int val) 将元素val推入堆栈。 void pop() 删除堆栈顶部的元素。 int top() 获取堆栈顶部的元素。 int getMin() 获取堆栈中的最小元素。 说明: -231 <= val <= 231 - 1 pop、top 和 getMin 操作总是在 非空栈 上调用 push, pop, top, and getMin最多被调用 3 * 104 次 示例: 示例 1: 1234567891011121314输入:["MinStack","push","push","push","getMin","pop","top","getMin"][[]...
有效的括号-LeetCode
有效的括号 🎯 问题描述(来源于LeetCode) 描述: 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左括号。 说明: 1 <= s.length <= 104 s 仅由括号 '()[]{}' 组成 示例: 示例 1: 123输入:s = "()"输出:true 示例 2: 123输入:s = "([)]"输出:false 💻 解题思路 思路1:栈 思路1:代码实现 12345678910111213141516171819202122232425262728class Solution: def isValid(self, s: str) -> bool: stack=[] for i in range(len(s)): ...
逆波兰表示式求值-LeetCode
逆波兰表示式求值 🎯 问题描述(来源于LeetCode) 描述: 给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 注意: 有效的算符为 '+'、'-'、'*' 和 '/' 。 每个操作数(运算对象)都可以是一个整数或者另一个表达式。 两个整数之间的除法总是 向零截断 。 表达式中不含除零运算。 输入是一个根据逆波兰表示法表示的算术表达式。 答案及所有中间计算结果可以用 32 位 整数表示。 说明: 1 <= tokens.length <= 104 tokens[i] 是一个算符("+"、"-"、"*" 或 "/"),或是在范围 [-200, 200] 内的一个整数 示例: 示例 1: 123输入:tokens = ["2","1","+","3","*"]输出:9解释:该算式转化为常见的中缀算...
验证栈序列-LeetCode
验证栈序列 🎯 问题描述(来源于LeetCode) 描述: 给定 pushed 和 popped 两个序列,每个序列中的 值都不重复,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回 true;否则,返回 false 。 说明: 1 <= pushed.length <= 1000 0 <= pushed[i] <= 1000 pushed 的所有元素 互不相同 popped.length == pushed.length popped 是 pushed 的一个排列 示例: 示例 1: 12345输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]输出:true解释:我们可以按以下顺序执行:push(1), push(2), push(3), push(4), pop() -> 4,push(5), pop() -> 5, pop() -> 3, pop() -> 2, pop() -> 1 示例 2: 123输...
子数组最大平均数I-LeetCode
子数组最大平均数I 🎯 问题描述(来源于LeetCode) 描述: 给你一个由 n 个元素组成的整数数组 nums 和一个整数 k 。 请你找出平均数最大且 长度为 k 的连续子数组,并输出该最大平均数。 任何误差小于 10-5 的答案都将被视为正确答案。 说明: n == nums.length 1 <= k <= n <= 105 -104 <= nums[i] <= 104 示例: 示例 1: 123输入:nums = [1,12,-5,-6,50,3], k = 4输出:12.75解释:最大平均数 (12-5-6+50)/4 = 51/4 = 12.75 示例 2: 12输入:nums = [5], k = 1输出:5.00000 💻 解题思路 思路1:固定长度滑动窗口 思路1:代码实现 1234567891011121314class Solution: def findMaxAverage(self, nums: List[int], k: int) -> float: left,rig...
最大连续1的个数III-LeetCode
最大连续1的个数III 🎯 问题描述(来源于LeetCode) 描述: 给定一个二进制数组 nums 和一个整数 k,假设最多可以翻转 k 个 0 ,则返回执行操作后 数组中连续 1 的最大个数 。 说明: 1 <= nums.length <= 105 nums[i] 不是 0 就是 1 0 <= k <= nums.length 示例: 示例 1: 1234输入:nums = [1,1,1,0,0,0,1,1,1,1,0], K = 2输出:6解释:[1,1,1,0,0,1,1,1,1,1,1]粗体数字从 0 翻转到 1,最长的子数组长度为 6。 示例 2: 1234输入:nums = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3输出:10解释:[0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1]粗体数字从 0 翻转到 1,最长的子数组长度为 10。 💻 解题思路 思路1:可变长度滑动窗口 思路1:代码实现 12345678910111213...











