int[] nextGreater(int[] values) {
int[] answer = new int[values.length];
Arrays.fill(answer, -1);
ArrayDeque<Integer> stack = new ArrayDeque<>();
for (int i = 0; i < values.length; i++) {
while (!stack.isEmpty() && values[stack.peek()] < values[i]) answer[stack.pop()] = i;
stack.push(i);
}
return answer;
}
def next_greater(values: list[int]) -> list[int]:
answer = [-1] * len(values)
stack = []
for i, value in enumerate(values):
while stack and values[stack[-1]] < value:
answer[stack.pop()] = i
stack.append(i)
return answer
def nextGreater(values: Array[Int]): Array[Int] =
val answer = Array.fill(values.length)(-1)
val stack = scala.collection.mutable.Stack[Int]()
for i <- values.indices do
while stack.nonEmpty && values(stack.top) < values(i) do answer(stack.pop()) = i
stack.push(i)
answer
std::vector<int> nextGreater(const std::vector<int>& values) {
std::vector<int> answer(values.size(), -1);
std::vector<int> stack;
for (int i = 0; i < values.size(); i++) {
while (!stack.empty() && values[stack.back()] < values[i]) {
answer[stack.back()] = i;
stack.pop_back();
}
stack.push_back(i);
}
return answer;
}