Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save luojiyin1987/08a99829e0803a2e100995e04e85579e to your computer and use it in GitHub Desktop.
Save luojiyin1987/08a99829e0803a2e100995e04e85579e to your computer and use it in GitHub Desktop.
Next Greater Element I
func nextGreaterElement(findNums []int, nums []int) []int {
table := map[int]int{}
stack := []int{}
for _, n := range nums {
size := len(stack)
for size != 0 && stack[size-1] < n {
table[stack[size-1]] = n
stack = stack[:size-1]
size--
}
stack = append(stack, n)
}
result := []int{}
for _,n := range findNums {
m,flag := table[n]
if flag == false {
m = -1
}
result= append(result, m)
}
return result
}
@luojiyin1987
Copy link
Author

luojiyin1987 commented Aug 1, 2017

func nextGreaterElement(findNums []int, nums []int) []int {
if len(findNums) == 0 {
return []int{ }
}

m := make(map[int]int)
r := make([]int, len(findNums))
length := len(nums)

for i, value := range nums {
    m[value] = i
}

for i, v := range findNums {
    for start := m[v]; start < length; start++ {
        if start + 1 >= length {
            r[i] = -1
            break
        }
        
        if nums[start + 1] > v {
            r[i] = nums[start + 1]
            break
        }
    }
}

return r

}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment