思路:利用单调栈,维护一个单调递减的栈。遍历链表,如果当前节点的值比栈顶元素大,则说明栈顶元素的下一个更大节点就是当前节点,将栈顶元素出栈,并将其下一个更大节点值设置为当前节点的值。重复该过程直到当前节点小于等于栈顶元素,将当前节点入栈。最后遍历完链表后,栈中剩余的节点没有下一个更大节点,将它们的答案设置为0即可。

时间复杂度:O(n),空间复杂度:O(n)。

Java代码如下:

class Solution { public int[] nextLargerNodes(ListNode head) { List list = new ArrayList<>(); while (head != null) { list.add(head.val); head = head.next; } int[] res = new int[list.size()]; Stack stack = new Stack<>(); for (int i = 0; i < list.size(); i++) { int val = list.get(i); while (!stack.isEmpty() && val > list.get(stack.peek())) { res[stack.pop()] = val; } stack.push(i); } return res; } }

给定一个长度为 n 的链表 head对于列表中的每个节点查找下一个 更大节点 的值。也就是说对于每个节点找到它旁边的第一个节点的值这个节点的值 严格大于 它的值。返回一个整数数组 answer 其中 answeri 是第 i 个节点 从1开始 的下一个更大的节点的值。如果第 i 个节点没有下一个更大的节点设置 answeri = 0 。请编写Java程序实现

原文地址: https://www.cveoy.top/t/topic/bR7g 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录