leetcode503 下一个更大元素 II golang

503. 下一个更大元素 II

解题思路

模拟解法,利用下标优化。
A[i]表示数组中下一个大于nums[i]的下标,如果不存在则标记为i
我们从后向前遍历数组,利用动态规划,所有大于当前下标 current_i 的都已经计算过了。

  1. 对于大于 current_i 的下标 j , 如果 nums[j] 大于nums[current_i],则A[i]=j
  2. 如果小于,则令 j = A[j],去下一个大于nums[j]的下标。这里有2个case需要处理
    1. 如果 j > i && A[j] == j 则证明不存在数大于A[j],而A[i]>=A[j],更不存在,所以A[i]=j
    2. 如果 j <i证明还没有计算,则j++

代码

func nextGreaterElements(nums []int) []int {
    A := make([]int, len(nums))
    n := len(A)
    for i := n - 1; i >= 0; i-- {
        A[i] = i
        for j := i + 1; j != i; {
            j %= n
            if j == i {
                break
            }
            if nums[j] > nums[i] {
                A[i] = j
                break
            }
            if j > i {
                if A[j] == j {
                    break
                } else {
                    j = A[j]
                }
            } else {
                j++
            }
        }
    }
    for i:=range A{
        if A[i]==i{
            A[i]=-1
        }else{
            A[i]=nums[A[i]]
        }
    }
    return A
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容