pythonブラシleetcodeテーマ(13)
2642 ワード
136.一度しか現れない数字
空でない整数配列が与えられ、ある要素が1回しか現れない以外は、各要素が2回現れます.それが一度しか現れなかった要素を見つけます.
説明:
あなたのアルゴリズムは線形時間の複雑さを持つべきです.余分なスペースを使わずに実現できますか?
例1:
例2:
コードは次のとおりです.
102.ツリーの階層遍歴
ツリーを指定して、階層的にループするノード値を返します.(つまり、左から右へすべてのノードに階層的にアクセスします).
例えば、所与の二叉木:
階層遍歴の結果を返します.
コードは以下の通りである:44 ms通過、キューの広さ優先遍歴を採用
学び合い、教え合う.
空でない整数配列が与えられ、ある要素が1回しか現れない以外は、各要素が2回現れます.それが一度しか現れなかった要素を見つけます.
説明:
あなたのアルゴリズムは線形時間の複雑さを持つべきです.余分なスペースを使わずに実現できますか?
例1:
: [2,2,1]
: 1
例2:
: [4,1,2,1,2]
: 4
コードは次のとおりです.
class Solution:
def singleNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
nums.sort()
mark = 0
if len(nums) == 1:
return(nums[0])
else:
for i in range(len(nums)-1):
if nums[i] == nums[i+1] :
mark += 1
else:
if mark == 0:
return nums[i]
else:
mark = 0
if nums[-1] != nums[-2]:
return nums[-1]
102.ツリーの階層遍歴
ツリーを指定して、階層的にループするノード値を返します.(つまり、左から右へすべてのノードに階層的にアクセスします).
例えば、所与の二叉木:
[3,9,20,null,null,15,7]
、 3
/ \
9 20
/ \
15 7
階層遍歴の結果を返します.
[
[3],
[9,20],
[15,7]
コードは以下の通りである:44 ms通過、キューの広さ優先遍歴を採用
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def levelOrder(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
if root is None:
return []
res = []
queue = [root]
while queue:
nodes = []
values = []
for node in queue:
if node.left:
nodes.append(node.left)
if node.right:
nodes.append(node.right)
values += [node.val]
res += [values]
queue = nodes
return res
#### the second method
stack = [(root,0)]
res = []
while stack!=[]:
node,level = stack.pop()
if node:
if len(res) < (level+1):
res.insert(0,[])
res[-(level+1)].append(node.val)
stack.append((node.right,level+1))
stack.append((node.left,level+1))
return res[::-1]
学び合い、教え合う.