LeetCode-Python-1019. チェーンテーブルの次の大きなノード
ヘッダノード
各ノードには、次のより大きな値(next larger value):
整数解答配列
なお、以下の例では、
例1:
例2:
例3:
ヒント:チェーンテーブル内の各ノードについて、 .所与のリストの長さは である.
一反三を挙げると、本題は以下の問題と同類の問題です.
LeetCode-Python-503. 次の大きな要素II
LeetCode-Python-739. 毎日の温度
LeetCode-Python-496. 次の大きな要素I
LeetCode-Python-1030. チェーンテーブルの次の大きなノード
head
を第1のノードとするチェーンテーブルが与えられる.チェーンテーブルのノード番号は、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、2番目のノードの値が1、3番目のノードの値が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]
の範囲内# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def nextLargerNodes(self, head):
"""
:type head: ListNode
:rtype: List[int]
"""
h = head
l = list()
while(h): #
l.append(h.val)
h = h.next
stack = list()
res = [0 for i in range(len(l))]
cnt = 0
while(cnt < len(l)): #
if not stack or l[stack[-1]] >= l[cnt]: # stack ,
stack.append(cnt)#
else:# ,
while(stack and l[stack[-1]] < l[cnt]): # ,
res[stack[-1]] = l[cnt]
stack.pop()
stack.append(cnt) #
cnt += 1
return res
一反三を挙げると、本題は以下の問題と同類の問題です.
LeetCode-Python-503. 次の大きな要素II
LeetCode-Python-739. 毎日の温度
LeetCode-Python-496. 次の大きな要素I
LeetCode-Python-1030. チェーンテーブルの次の大きなノード