Leetcode--442. 数组中重复的数据
給定一個整數數組 a,其中1 ≤ a[i] ≤ n (n為數組長度), 其中有些元素出現兩次而其他元素出現一次。
找到所有出現兩次的元素。
你可以不用到任何額外空間并在O(n)時間復雜度內解決這個問題嗎?
示例:
輸入:
[4,3,2,7,8,2,3,1]
輸出:
[2,3]
思路:利用好1 ≤ a[i] ≤ n
把nums[i]放到對應的i上,最后不在對應位置的就是出現兩次的。
提交的代碼:
class?Solution?{
????public?List<Integer>?findDuplicates(int[]?nums)?{
????????List<Integer>?list?=?new?ArrayList<>();
????????int?t;
????????for(int?i=0;i<nums.length;)
????????{
????????????if(nums[i]!=i+1&&nums[nums[i]-1]!=nums[i])
????????????{
????????????????t?=?nums[nums[i]-1];
????????????????nums[nums[i]-1]?=?nums[i];
????????????????nums[i]?=?t;
????????????}
????????????else
????????????{
????????????????i++;
????????????}
????????}
????????for(int?i=0;i<nums.length;i++)
????????{
????????????if(nums[i]!=i+1)
????????????{
????????????????list.add(nums[i]);
????????????}
????????}
????????return?list;
????}
}
總結
以上是生活随笔為你收集整理的Leetcode--442. 数组中重复的数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 动态规划--Leetcode121.买卖
- 下一篇: 第一章 计算机网络 5 分层结构/协议/