領扣(LeetCode)錯誤的集合 個人題解

2022-09-03 09:33:14 字數 947 閱讀 2259

集合s包含從1到n的整數。不幸的是,因為資料錯誤,導致集合裡面某乙個元素複製了成了集合裡面的另外乙個元素的值,導致集合丟失了乙個整數並且有乙個元素重複。

給定乙個陣列nums代表了集合s發生錯誤後的結果。你的任務是首先尋找到重複出現的整數,再找到丟失的整數,將它們以陣列的形式返回。

示例 1:

輸入: nums = [1,2,2,4]

輸出: [2,3]

注意:

給定陣列的長度範圍是 [2, 10000]。

給定的陣列是無序的。

拿到這題,正常的思路,拿乙個hashmap記錄出現的次數,如果多次出現即為重複的數,記錄下來。然後用另外乙個迴圈記錄缺失的數。執行速度不穩定,最高打敗了50%的人

**如下:

1

class

solution else11}

12for (int i = 0; i < nums.length; i++) 17}

18return

ans;

1920

}21 }

考慮到map的查詢效率不是太高,於是改進版使用了乙個標記陣列來代替map的功能。道理是一樣的。形如 :標記陣列[nums的值]=nums的值出現的個數 

首先賦值標記陣列全部為0,然後遍歷nums給標記陣列賦值,最後遍歷標記陣列,如果標記陣列在index的值為2,則index這個數重複了兩次,如果在index這個位置的值為0,則說明index這個數沒有出現過。

這樣做的效率變高了許多。

**如下:

1

class

solution

10for(int i=1;i)

1117

return

ans;18}

19 }

LeetCode645 錯誤的集合

集合s包含從1到n的整數。不幸的是,因為資料錯誤,導致集合裡面某乙個元素複製了成了集合裡面的另外乙個元素的值,導致集合丟失了乙個整數並且有乙個元素重複。給定乙個陣列nums代表了集合s發生錯誤後的結果。你的任務是首先尋找到重複出現的整數,再找到丟失的整數,將它們以陣列的形式返回。示例 1 輸入 nu...

LeetCode 645 錯誤的集合

集合 s 包含從1到 n 的整數。不幸的是,因為資料錯誤,導致集合裡面某乙個元素複製了成了集合裡面的另外乙個元素的值,導致集合丟失了乙個整數並且有乙個元素重複。給定乙個陣列 nums 代表了集合 s 發生錯誤後的結果。你的任務是首先尋找到重複出現的整數,再找到丟失的整數,將它們以陣列的形式返回。示例...

leetcode 645 錯誤的集合

645.錯誤的集合 集合 s 包含從1到 n 的整數。不幸的是,因為資料錯誤,導致集合裡面某乙個元素複製了成了集合裡面的另外乙個元素的值,導致集合丟失了乙個整數並且有乙個元素重複。給定乙個陣列 nums 代表了集合 s 發生錯誤後的結果。你的任務是首先尋找到重複出現的整數,再找到丟失的整數,將它們以...