当前位置:   article > 正文

LeetCode - 503 下一个更大元素 II_peekele, peekidx = stack[-1]

peekele, peekidx = stack[-1]

目录

题目来源

题目描述

示例

提示

题目解析

算法源码


题目来源

503. 下一个更大元素 II - 力扣(LeetCode)

题目描述

给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的 下一个更大元素 。

数字 x 的 下一个更大的元素 是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1 。

示例

输入: nums = [1,2,1]
输出: [2,-1,2]
解释: 第一个 1 的下一个更大的数是 2;
数字 2 找不到下一个更大的数; 
第二个 1 的下一个最大的数需要循环搜索,结果也是 2。

输入: nums = [1,2,3,4,3]
输出: [2,3,4,-1,4]

提示

  • 1 <= nums.length <= 104
  • -109 <= nums[i] <= 109

题目解析

这题和算法 - 找朋友_伏城之外的博客-CSDN博客

类似,我们需要先理解上面这题算法,然后再来看本题。

本题更难一点,因为本题的下一个更大元素可以数组循环查找。

比如输入数组为arr = [100,1,11,1,120,111,123,1,-1,-100],中最后一个元素-100的下一个更大元素是100。

本题的解题思路我是这样考虑的,先将输入数组基于栈结构遍历比较一次,得到stack结果为

arr[0]入栈100入栈[100]
arr[1]入栈1入栈[100, 1]
arr[2]入栈11入栈[100, 11]
arr[3]入栈1入栈[100, 11, 1]
arr[4]入栈120入栈[120]
arr[5]入栈111入栈[120, 111]
arr[6]入栈123入栈[123]
arr[7]入栈1入栈[123, 1]
arr[8]入栈-1入栈[123, 1, -1]
arr[9]入栈-100入栈[123, 1, -1, -100]

由于下一个更大元素可以循环查找数组,并且此时stack为一个降序结构,因此我们只需要再遍历一次输入数组,即可将stack中除了栈底最大值元素外的其他元素全部弹栈。

算法源码

  1. /**
  2. * @param {number[]} nums
  3. * @return {number[]}
  4. */
  5. var nextGreaterElements = function(nums) {
  6. let stack = []
  7. let len = nums.length
  8. let res = new Array(len).fill(-1)
  9. for(let i=0; i<len; i++){
  10. let ele = nums[i]
  11. let idx = i
  12. while(true) {
  13. if(stack.length === 0) {
  14. stack.push([ele, idx])
  15. break;
  16. } else {
  17. let [peekEle, peekIdx] = stack[stack.length - 1]
  18. if(ele > peekEle) {
  19. res[peekIdx] = ele
  20. stack.pop()
  21. } else {
  22. stack.push([ele, idx])
  23. break;
  24. }
  25. }
  26. }
  27. }
  28. if(stack.length === 1) return res
  29. for(let i=0; i<len; i++) {
  30. let ele = nums[i]
  31. while(true) {
  32. let [peekEle, peekIdx] = stack[stack.length - 1]
  33. if(ele > peekEle) {
  34. res[peekIdx] = ele
  35. stack.pop()
  36. } else {
  37. break
  38. }
  39. }
  40. }
  41. return res
  42. };

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/807205
推荐阅读
相关标签
  

闽ICP备14008679号