当前位置: 面试刷题>> 下一个更大的数 (经典算法题500道)


### 题目描述补充 题目:**下一个更大的数(Next Greater Element)** 给定一个正整数数组 `nums`,找出每个元素的“下一个更大元素”。数组的每个元素 `nums[i]` 的下一个更大元素是指 `nums` 中满足 `nums[j] > nums[i]` 的 `nums[j]` 的最小值,其中 `j > i`;如果不存在这样的元素,则对应位置输出 `-1`。 例如,给定数组 `[1,2,1]`,输出应为 `[2, -1, -1]`。因为第一个 `1` 的下一个更大元素是 `2`,第二个 `2` 后面没有更大的元素,所以输出 `-1`,同理,最后一个 `1` 后面也没有更大的元素,输出 `-1`。 ### 示例代码 #### PHP 代码示例 ```php function nextGreaterElement($nums) { $stack = []; // 使用栈来保存元素索引 $result = array_fill(0, count($nums), -1); // 初始化结果数组,全为-1 for ($i = 0; $i < count($nums); $i++) { while (!empty($stack) && $nums[$i] > $nums[end($stack)]) { $result[array_pop($stack)] = $nums[$i]; // 弹出栈顶元素,并更新其结果为当前值 } $stack[] = $i; // 将当前索引压入栈 } return $result; } // 示例 $nums = [1, 2, 1]; $result = nextGreaterElement($nums); print_r($result); ``` #### Python 代码示例 ```python def nextGreaterElement(nums): stack = [] # 使用栈来保存元素索引 result = [-1] * len(nums) # 初始化结果数组,全为-1 for i in range(len(nums)): while stack and nums[i] > nums[stack[-1]]: result[stack.pop()] = nums[i] # 弹出栈顶元素,并更新其结果为当前值 stack.append(i) # 将当前索引压入栈 return result # 示例 nums = [1, 2, 1] result = nextGreaterElement(nums) print(result) ``` #### JavaScript 代码示例 ```javascript function nextGreaterElement(nums) { const stack = []; // 使用栈来保存元素索引 const result = new Array(nums.length).fill(-1); // 初始化结果数组,全为-1 for (let i = 0; i < nums.length; i++) { while (stack.length > 0 && nums[i] > nums[stack[stack.length - 1]]) { result[stack.pop()] = nums[i]; // 弹出栈顶元素,并更新其结果为当前值 } stack.push(i); // 将当前索引压入栈 } return result; } // 示例 const nums = [1, 2, 1]; const result = nextGreaterElement(nums); console.log(result); ``` 在以上三个示例中,均使用了单调栈的概念来解决问题,这种方法在处理这类问题时非常高效。每个示例都包含了对栈的基本操作,以及如何通过遍历数组来更新结果数组。通过这些代码,你可以清晰地看到如何找到每个元素的下一个更大元素。
推荐面试题