From a8738e82f333db6b3dc791ad84ab505873dd141f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BD=A9=E8=BE=95=E9=BE=99=E5=84=BF?= Date: Mon, 10 Apr 2023 16:54:51 +0800 Subject: [PATCH] =?UTF-8?q?1019:=E9=93=BE=E8=A1=A8=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E4=B8=8B=E4=B8=80=E4=B8=AA=E6=9B=B4=E5=A4=A7=E8=8A=82=E7=82=B9?= =?UTF-8?q?(=E4=BB=A3=E7=A0=81=E4=BF=AE=E6=94=B9=EF=BC=8C=E6=9C=AA?= =?UTF-8?q?=E5=AE=8C=E6=88=90)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/NextGreaterNodeInLinkedList.java | 51 +++++++++++++------ 1 file changed, 36 insertions(+), 15 deletions(-) diff --git a/src/main/java/leetcode/editor/cn/NextGreaterNodeInLinkedList.java b/src/main/java/leetcode/editor/cn/NextGreaterNodeInLinkedList.java index cd4ed24..57f6807 100644 --- a/src/main/java/leetcode/editor/cn/NextGreaterNodeInLinkedList.java +++ b/src/main/java/leetcode/editor/cn/NextGreaterNodeInLinkedList.java @@ -44,7 +44,9 @@ package leetcode.editor.cn; import com.code.leet.entiy.ListNode; import java.util.ArrayList; +import java.util.LinkedList; import java.util.List; +import java.util.Queue; //1019:链表中的下一个更大节点 public class NextGreaterNodeInLinkedList { @@ -64,27 +66,46 @@ public class NextGreaterNodeInLinkedList { * } */ class Solution { + // public int[] nextLargerNodes(ListNode head) { +// List list = new ArrayList<>(); +// List result = new ArrayList<>(); +// List indexs = new ArrayList<>(); +// int max = 0; +// int index = 0; +// while (head != null) { +// indexs.add(index); +// if (head.val > max) { +// int size = indexs.size(); +// for (int i = 0; i < size; i++) { +// if (head.val > result.get(indexs.get(i))) { +// result.set(indexs.get(i), head.val); +// indexs.remove(indexs.get(i)); +// } +// } +// max = head.val; +// } +// index++; +// result.add(0); +// list.add(head.val); +// head = head.next; +// } +// result.add(0); +// return result.stream().mapToInt(Integer::valueOf).toArray(); +// } public int[] nextLargerNodes(ListNode head) { - List list = new ArrayList<>(); List result = new ArrayList<>(); - List indexs = new ArrayList<>(); - int max = 0; + Queue queue = new LinkedList<>(); + Queue indexs = new LinkedList<>(); int index = 0; while (head != null) { - indexs.add(index); - if (head.val > max) { - int size = indexs.size(); - for (int i = 0; i < size; i++) { - if (head.val > result.get(indexs.get(i))) { - result.set(indexs.get(i), head.val); - indexs.remove(indexs.get(i)); - } - } - max = head.val; + while (!queue.isEmpty() && head.val > queue.peek()) { + result.set(indexs.poll(), head.val); + queue.poll(); } - index++; + queue.add(head.val); + indexs.add(index); result.add(0); - list.add(head.val); + index++; head = head.next; } result.add(0);