当前位置:实例文章 » 其他实例» [文章]LeetCode刷题 | 503. 下一个更大元素

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 解决方案。我们的解决方案首先初始化栈和结果数组,然后遍历数组两次,找到下一个更大元素。最后,我们将当前元素压入栈中,直到找到下一个更大元素为止。

其他信息

其他资源

Top