題目連結(jié):
題目意譯:
我們給定一個(gè)連結(jié)串列其中 head 作為其第一個(gè)節(jié)點(diǎn)。將串列中的節(jié)點(diǎn)命名為 node_1、node_2、node_3、…… 以此類推。
每個(gè)節(jié)點(diǎn)可能有著下一個(gè)較大的值:對(duì)於 node_i,next_larger(node_i) 為 node_j.val 使得 j > i 、 node_j.val > node_i.val 且 j 盡可能地小。如果這種 j 值不存在,則下一個(gè)較大值定義為 0。
回傳一整數(shù)陣列 answer,其中 answer[i] = next_larger(node_{i+1})。
注意下列的範(fàn)例輸入(不是輸出)中,陣列如 [2,1,5] 代表的是一個(gè)連結(jié)串列的序列化之結(jié)果,其表示著首節(jié)點(diǎn)值為 2 、第二個(gè)節(jié)點(diǎn)值為 1 以及第三個(gè)節(jié)點(diǎn)值為 5 。
注:
1 ≦ node.val ≦ 10 ^ 9 對(duì)於每個(gè)連結(jié)串列中的節(jié)點(diǎn) node。
給定的串列長(zhǎng)度在範(fàn)圍 [0, 10000] 中。
範(fàn)例測(cè)資:
範(fàn)例 1:
輸入: [2,1,5]
輸出: [5,5,0]
範(fàn)例 2:
輸入: [2,7,4,3,5]
輸出: [7,0,5,5,0]
範(fàn)例 3:
輸入: [1,7,5,1,9,2,5,1]
輸出: [7,9,9,9,0,5,0,0]
解題思維:
參見
這題的核心想法(基本上該題除了要求的格式不太一樣以外,跟本題其實(shí)差不多)。
在本題中也是利用一個(gè)堆疊(Stack)維護(hù)一個(gè)遞減數(shù)列,然後同時(shí)記錄數(shù)列中每個(gè)值原先的索引值。
然後當(dāng)有新的元素 x > 堆疊頂端時(shí)就將頂端移除直到頂端不再小於 x 時(shí)(或是直到堆疊為空),期間將被移除的元素根據(jù)其索引值將 x 設(shè)為其下一個(gè)較大之值。
此次分享到此為止,如有任何更加簡(jiǎn)潔的想法或是有說明不清楚之地方,也煩請(qǐng)各位大大撥冗討論。