LeetCode刷题 | 503. 下一个更大元素
发布人:shili8
发布时间:2025-02-13 20:45
阅读次数:0
**LeetCode刷题 |503. 下一个更大元素**
在这个系列中,我们将讨论如何解决 LeetCode 上的第503 题:下一个更大元素。这个问题涉及给定一个整数数组,找出每个元素的下一个更大元素。
### 题目描述给定一个整数数组 `nums`,返回一个长度为 `nums.length` 的数组,其中包含对于每个 `nums[i]`,其下一个更大元素。如果不存在这样的元素,则将 `null` 填入该位置。
**示例1:**
输入:`nums = [2,4,3,5,1]`
输出:`[4,5,null,null,0]`
**示例2:**
输入:`nums = [4,5,4,4,4]`
输出:`[5,4,4,4,4]`
### 解决方案我们将使用栈来解决这个问题。栈的基本思想是,我们将元素压入栈中,直到找到下一个更大元素为止。
####代码实现
from typing import Listclass Solution: def nextGreaterElements(self, nums: List[int]) -> List[int]: # 初始化栈和结果数组 stack = [] result = [0] * len(nums) # 遍历数组两次,找到下一个更大元素 for i in range(len(nums) *2): while stack and nums[i % len(nums)] >= stack[-1]: # 如果当前元素大于栈顶元素,则弹出栈顶元素并更新结果数组 result[stack.pop()] = nums[i % len(nums)] # 将当前元素压入栈中 stack.append(i % len(nums)) return result
####代码注释* 我们首先初始化一个空栈和长度为 `nums.length` 的结果数组。
* 然后,我们遍历数组两次,找到下一个更大元素。我们使用模运算来处理循环的索引。
* 在每个迭代中,我们检查栈顶元素是否小于当前元素。如果是,则弹出栈顶元素并更新结果数组。
* 最后,我们将当前元素压入栈中,直到找到下一个更大元素为止。
### 测试用例我们可以使用以下测试用例来验证我们的解决方案:
solution = Solution() print(solution.nextGreaterElements([2,4,3,5,1])) # [4,5,null,null,0] print(solution.nextGreaterElements([4,5,4,4,4])) # [5,4,4,4,4]
### 总结在本文中,我们讨论了 LeetCode 上的第503 题:下一个更大元素。我们使用栈来解决这个问题,并提供了一个 Python 解决方案。我们的解决方案首先初始化栈和结果数组,然后遍历数组两次,找到下一个更大元素。最后,我们将当前元素压入栈中,直到找到下一个更大元素为止。