日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Leetcode--448. 找到所有数组中消失的数字

發布時間:2024/7/19 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Leetcode--448. 找到所有数组中消失的数字 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

給定一個范圍在??1 ≤ a[i] ≤ n (?n = 數組大小 ) 的 整型數組,數組中的元素一些出現了兩次,另一些只出現一次。

找到所有在 [1, n] 范圍之間沒有出現在數組中的數字。

您能在不使用額外空間且時間復雜度為O(n)的情況下完成這個任務嗎? 你可以假定返回的數組不算在額外空間內。

示例:

輸入:
[4,3,2,7,8,2,3,1]

輸出:
[5,6]

思路:

歸位法,將各數字放于他應有的次序,之后遍歷數組,每個位置上的數字與原本應有的數字不對應,即數字i+1不存在

例如:2 3? 5? 1? 2

第一次遍歷:2應該放在第二個位置,-> 3 2 5 1 2

還在i=0位置處,發現3也不在應該的位置? -> 5? 2? 3? 1? 2

哎?5也不在? ?->2? 2? 3? 1? 5

雖然第一個2不應該放在i=0處,但i=1處已經有2,所以不交換,進行第二次遍歷

第二次遍歷:第二個2已經歸位

第三次遍歷:3已經歸位

第四次遍歷:1不在本來的位置? ->1? 2? 3? 2? 5

第五次遍歷:5已經歸位

之后遍歷數組,發現i=3處本來應該是4,現在沒有,4就是消失的數字

提交的代碼:

class?Solution?{

????public?List<Integer>?findDisappearedNumbers(int[]?nums)?{

????????List<Integer>?list?=?new?ArrayList<Integer>();

????????????for(int?i=0;i<nums.length;i++)

????????????{

????????????????while(nums[i]!=nums[nums[i]-1])? //不可寫為if,因為交換之后,i處可能還不是本來應該有的數字,具體看上面的例子

????????????????{

????????????????????int?t?=?nums[nums[i]-1];

????????????????????nums[nums[i]-1]?=?nums[i];

????????????????????nums[i]?=?t;

????????????????}

????????????}

????????????for(int?i=0;i<nums.length;i++)

????????????{

????????????????if(nums[i]!=(i+1))

????????????????{

????????????????????list.add(i+1);

????????????????}

????????????}

????????????return?list;

????}

}

總結

以上是生活随笔為你收集整理的Leetcode--448. 找到所有数组中消失的数字的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。