題解 消失的兩個數字

2021-10-08 11:13:39 字數 1872 閱讀 7899

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

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

示例1:

輸入:[1]

輸出:[2,3]

示例2:

輸入:[2,3]

輸出:[1,4]

已知陣列nums中元素的最小值為1,最大值為nums.size() + 2。先給nums新增兩個-1,再將陣列中的每個正數x移動到下標為x - 1的位置上。最後值為-1的陣列元素的下標對應著消失的數字。

class

solution

}for

(int i =

0; i < nums.

size()

;++i)

}return ans;}}

;

或者將每個正數陣列元素x移動到下標為x的位置上,但此時要考慮0的存在。

class

solution

}for

(int i =

0; i < nums.

size()

;++i)

}return ans;}}

;

若要交換nums[i]nums[nums[i] - 1],應該先將nums[nums[i] - 1]置為nums[i],若先改變了nums[i]的值,那對nums[nums[i] - 1]的修改就不符合預期了。

正確示範:

int t = nums[nums[i]-1

];nums[nums[i]-1

]= nums[i]

;nums[i]

= t;

錯誤示範:

i = 0時,需要交換nums[0]nums[2],使nums[2] == 3,nums[0] == 4。在錯誤示範中,先將3儲存到t,然後將nums[0]置為4,最後把nums[nums[0] - 1]nums[3]置為3。結果如下圖所示,不符合預期。

類似的題目還有:

leetcode 268:缺失數字

python 消失的兩個數字

給定乙個陣列,包含從 1 到 n 所有的整數,但其中缺了兩個數字。你能在 o n 時間內只用 o 1 的空間找到它們嗎?以任意順序返回這兩個數字均可。示例 1 輸入 1 輸出 2,3 示例 2 輸入 2,3 輸出 1,4 nums.length 30000一 數學方法 以兩數之和的平均值為界,乙個在...

消失的兩個數字 LeetCode

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

兩個數字相加

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