給定乙個陣列,包含從 1 到 n 所有的整數,但其中缺了兩個數字。你能在 o(n) 時間內只用 o(1) 的空間找到它們嗎?
以任意順序返回這兩個數字均可。
示例1:
輸入:[1]示例2:輸出:[2,3]
輸入:[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...