From 602b60c36d040713b06522042b603f0e8d7aa3e0 Mon Sep 17 00:00:00 2001 From: huangge1199 Date: Mon, 7 Jun 2021 11:20:28 +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?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/NextGreaterNodeInLinkedList.java | 95 +++++++++++++++++++ .../editor/cn/NextGreaterNodeInLinkedList.md | 37 ++++++++ 2 files changed, 132 insertions(+) create mode 100644 src/main/java/leetcode/editor/cn/NextGreaterNodeInLinkedList.java create mode 100644 src/main/java/leetcode/editor/cn/NextGreaterNodeInLinkedList.md diff --git a/src/main/java/leetcode/editor/cn/NextGreaterNodeInLinkedList.java b/src/main/java/leetcode/editor/cn/NextGreaterNodeInLinkedList.java new file mode 100644 index 0000000..4df2e5e --- /dev/null +++ b/src/main/java/leetcode/editor/cn/NextGreaterNodeInLinkedList.java @@ -0,0 +1,95 @@ +//给出一个以头节点 head 作为第一个节点的链表。链表中的节点分别编号为:node_1, node_2, node_3, ... 。 +// +// 每个节点都可能有下一个更大值(next larger value):对于 node_i,如果其 next_larger(node_i) 是 node_j. +//val,那么就有 j > i 且 node_j.val > node_i.val,而 j 是可能的选项中最小的那个。如果不存在这样的 j,那么下一个更大值为 0 +// 。 +// +// 返回整数答案数组 answer,其中 answer[i] = next_larger(node_{i+1}) 。 +// +// 注意:在下面的示例中,诸如 [2,1,5] 这样的输入(不是输出)是链表的序列化表示,其头节点的值为 2,第二个节点值为 1,第三个节点值为 5 。 +// +// +// +// 示例 1: +// +// 输入:[2,1,5] +//输出:[5,5,0] +// +// +// 示例 2: +// +// 输入:[2,7,4,3,5] +//输出:[7,0,5,5,0] +// +// +// 示例 3: +// +// 输入:[1,7,5,1,9,2,5,1] +//输出:[7,9,9,9,0,5,0,0] +// +// +// +// +// 提示: +// +// +// 对于链表中的每个节点,1 <= node.val <= 10^9 +// 给定列表的长度在 [0, 10000] 范围内 +// +// Related Topics 栈 链表 +// 👍 156 👎 0 + +package leetcode.editor.cn; + +import com.code.leet.entiy.ListNode; + +import java.util.ArrayList; +import java.util.List; + +//1019:链表中的下一个更大节点 +public class NextGreaterNodeInLinkedList{ + public static void main(String[] args) { + //测试代码 + Solution solution = new NextGreaterNodeInLinkedList().new Solution(); + } + //力扣代码 + //leetcode submit region begin(Prohibit modification and deletion) +/** + * Definition for singly-linked list. + * public class ListNode { + * int val; + * ListNode next; + * ListNode(int x) { val = x; } + * } + */ +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(); + } +} +//leetcode submit region end(Prohibit modification and deletion) + +} \ No newline at end of file diff --git a/src/main/java/leetcode/editor/cn/NextGreaterNodeInLinkedList.md b/src/main/java/leetcode/editor/cn/NextGreaterNodeInLinkedList.md new file mode 100644 index 0000000..fca4153 --- /dev/null +++ b/src/main/java/leetcode/editor/cn/NextGreaterNodeInLinkedList.md @@ -0,0 +1,37 @@ +

给出一个以头节点 head 作为第一个节点的链表。链表中的节点分别编号为:node_1, node_2, node_3, ...

+ +

每个节点都可能有下一个更大值(next larger value):对于 node_i,如果其 next_larger(node_i) 是 node_j.val,那么就有 j > i 且  node_j.val > node_i.val,而 j 是可能的选项中最小的那个。如果不存在这样的 j,那么下一个更大值为 0 。

+ +

返回整数答案数组 answer,其中 answer[i] = next_larger(node_{i+1}) 。

+ +

注意:在下面的示例中,诸如 [2,1,5] 这样的输入(不是输出)是链表的序列化表示,其头节点的值为 2,第二个节点值为 1,第三个节点值为 5 。

+ +

 

+ +

示例 1:

+ +
输入:[2,1,5]
+输出:[5,5,0]
+
+ +

示例 2:

+ +
输入:[2,7,4,3,5]
+输出:[7,0,5,5,0]
+
+ +

示例 3:

+ +
输入:[1,7,5,1,9,2,5,1]
+输出:[7,9,9,9,0,5,0,0]
+
+ +

 

+ +

提示:

+ +
    +
  1. 对于链表中的每个节点,1 <= node.val <= 10^9
  2. +
  3. 给定列表的长度在 [0, 10000] 范围内
  4. +
+
Related Topics
  • 链表
  • \n
  • 👍 156
  • 👎 0
  • \ No newline at end of file