LeetCode Tencent特集演習50日11
質問136:1回だけ表示される数値
空でない整数配列を指定すると、1回だけ表示される1つの要素を除いて、他のすべての要素が2回表示されます。1回だけ表示される要素を見つけます。
説明:アルゴリズムは線形の時間計算量を持つ必要があります。余分なスペースを使わずにそれを行うことができますか?
回答:
def singleNumber(self, nums: List[int]) -> int:
res = 0
for num in nums:
res = res ^ num # 异或
return res
演算結果:
問題解決:
class Solution:
def singleNumber(self, nums: List[int]) -> int:
return sum(set(nums))*2 - sum(nums) # set()中不含重复元素
質問141:循環リンクリストリンクリストが
与えられた場合、リンクリストにリングがあるかどうかを判断します。
リンクリストに次のポインタを継続的に追跡することで再び到達できるノードがある場合、リンクリストにリングがあります。特定のリンクリスト内のリングを表すために、整数posを使用して、リンクリストの終わりがリンクリストに接続されている位置を示します(インデックスは0から始まります)。posが-1の場合、リンクリストにリングはありません。注:posは、リンクリストの実際の状況を識別するためだけに、パラメーターとして渡されることはありません。
リンクリストにリングがある場合は、trueを返します。それ以外の場合は、falseを返します。
回答:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def hasCycle(self, head: ListNode) -> bool:
if not head:
return False
while head.val and head.next != None:
head.val = None
head = head.next
if not head.next:
return False
else:
return True
演算結果:
質問142:循環リンクリストII
リンクリストを指定して、リンクリストがリングに入り始める最初のノードを返します。リンクリストにリングがない場合は、nullが返されます。
特定のリンクリスト内のリングを表すために、整数posを使用して、リンクリストの終わりがリンクリストに接続されている位置を示します(インデックスは0から始まります)。posが-1の場合、リンクリストにリングはありません。posはリングを識別するためにのみ使用され、パラメーターとして関数に渡されないことに注意してください。
注:指定されたリンクリストを変更することは許可されていません。
回答:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def detectCycle(self, head: ListNode) -> ListNode:
fast = slow = head
while fast and fast.next:
fast = fast.next.next
slow = slow.next
if fast == slow:
while head != slow:
head = head.next
slow = slow.next
return head
return None
演算結果: