📅  最后修改于: 2023-12-03 15:26:36.083000             🧑  作者: Mango
在处理数组和栈的时候,有时需要找到某个元素后面第一个比它大的元素,这就是所谓的“下一个更大元素”。例如,数组 [4, 3, 2, 1, 5, 7, 6] 的下一个更大元素数组为 [5, 5, 5, 5, 7, -1, 7]。
这篇文章将介绍如何用Java程序来实现查找下一个更大元素的算法。
算法的基本思路是用栈来存储需要查找下一个更大元素的元素的下标。从前往后遍历数组,如果当前元素比栈顶元素大,那么当前元素就是栈顶元素的下一个更大元素。循环判断,直到当前元素比栈顶元素小,就将当前元素下标入栈。等循环结束后,栈里剩下的元素就没有下一个更大元素。
下面就是Java实现的代码片段。
public int[] nextGreaterElement(int[] nums) {
// 结果数组
int[] result = new int[nums.length];
// 栈
Stack<Integer> stack = new Stack<>();
// 遍历数组
for (int i = 0; i < nums.length; i++) {
// 当栈不为空,且当前元素大于栈顶元素
while (!stack.isEmpty() && nums[i] > nums[stack.peek()]) {
// 栈顶元素出栈
int index = stack.pop();
// 栈顶元素的下一个更大元素就是当前元素
result[index] = nums[i];
}
// 将当前元素下标入栈
stack.push(i);
}
// 处理栈内剩余元素
while (!stack.isEmpty()) {
int index = stack.pop();
result[index] = -1;
}
return result;
}
下面是一个简单的测试代码,用于验证实现的正确性。
int[] nums = {4, 3, 2, 1, 5, 7, 6};
int[] result = nextGreaterElement(nums);
System.out.println(Arrays.toString(result)); // [5, 5, 5, 5, 7, -1, 7]
本文介绍了查找下一个更大元素的Java程序实现方法,该算法利用栈实现,时间复杂度为 O(n)。算法思路比较简单,但是需要仔细理解。在实际开发中,可以根据需要对代码做出适当的修改。