python 消失的兩個數字

2021-10-11 09:19:16 字數 1537 閱讀 2164

給定乙個陣列,包含從 1 到 n 所有的整數,但其中缺了兩個數字。你能在 o(n) 時間內只用 o(1) 的空間找到它們嗎?

以任意順序返回這兩個數字均可。

示例 1:

輸入: [1]

輸出: [2,3]

示例 2:

輸入: [2,3]

輸出: [1,4]

nums.length <= 30000

一、數學方法

以兩數之和的平均值為界,乙個在limit左邊,乙個在limit右邊。

class solution:

def missingtwo(self, nums: list[int]) -> list[int]:

n = len(nums) + 2

nums_sum = 0

for i in nums:

nums_sum += i

n_sum = n * (n + 1)//2 - nums_sum

limits = n_sum // 2

nums_sum = 0

for i in nums:

if i <= limits:

nums_sum += i

first = limits * (limits + 1)//2 - nums_sum

return [first, n_sum - first]

二、分組異或

class solution:

def missingtwo(self, nums: list[int]) -> list[int]:

ans = 0

n = len(nums)

for i in range(1, n+3):

ans ^= i

for i in nums:

ans ^= i

first = 0

diff = ans & -ans

for i in range(1, n+3):

if diff & i:

first ^= i

for i in nums:

if diff & i:

first ^= i

return [first, first^ans]

三、交換陣列

class solution:

def missingtwo(self, nums: list[int]) -> list[int]:

nums += [-1, -1]

for i in range(len(nums)):

while (i+1 != nums[i]) and (nums[i] != -1):

t = nums[i]

nums[i] = nums[t-1]

nums[t-1] = t

ans =

for i in range(len(nums)):

if nums[i] == -1 :

return ans

題解 消失的兩個數字

給定乙個陣列,包含從 1 到 n 所有的整數,但其中缺了兩個數字。你能在 o n 時間內只用 o 1 的空間找到它們嗎?以任意順序返回這兩個數字均可。示例1 輸入 1 輸出 2,3 示例2 輸入 2,3 輸出 1,4 已知陣列nums中元素的最小值為1,最大值為nums.size 2。先給nums新...

消失的兩個數字 LeetCode

題目 給定乙個陣列,包含從 1 到 n 所有的整數,但其中缺了兩個數字。你能在 o n 時間內只用 o 1 的空間找到它們嗎?以任意順序返回這兩個數字均可 方法一 求和法 思路 首先,算出如果沒有缺少數字的情況下整個陣列的和sum,與當前缺少數字的陣列的和相減,得到缺少的兩個數字的和double s...

兩個數字相加

兩個數字相加 題幹 給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3...