in_ = [8,2,5,4,3,9,7,2,5] def right_num(in_): stack = [0] res = [-1]*len(in_) i = 1 while i<len(in_): if stack and in_[i] > in_[stack[-1]]: res[stack.pop()] = in_[i] else: stack.append(i) i+=1 return res print(right_num(in_)) # [9, 5, 9, 9, 9, -1, -1, 5, -1]
字节跳动面试题
2. 求一个无序数组每一个元素的右侧第一个大于它的元素(否则-1),返回一个新数组。
如输入[6,2,1,4,8,5]
输出[8,4,4,-1,-1]
使用方法: 单调栈