在一個長度為n的數組里的所有數字都在0到n-1的范圍內。 數組中某些數字是重復的,但不知道有幾個數字是重復的。也不知道每個數字重復幾次。請找出數組中任意一個重復的數字。 例如,如果輸入長度為7的數組{2,3,1,0,2,5,3},那么對應的輸出是重復的數字2或者3。


題目 一個大小為n的數組,里面的數都屬於范圍[0, n-1],有不確定的重復元素,找到至少一個重復元素,要求O(1)空間和O(n)時間。 思路一 尋找重復元素,很容易想到建立哈希表來完成,遍歷一遍數組就可以將每個元素映射到哈希表中。

題目

一個大小為n的數組,里面的數都屬於范圍[0, n-1],有不確定的重復元素,找到至少一個重復元素,要求O(1)空間和O(n)時間。

思路一

尋找重復元素,很容易想到建立哈希表來完成,遍歷一遍數組就可以將每個元素映射到哈希表中。如果哈希表中已經存在這個元素則說明這就是個重復元素。這種方法可以很方便的在O(n)時間內完成對重復元素的查找。可是題目要求在O(1)的空間。因此采用哈希表這種解法肯定在空間復雜度上是不符合要求的。題目中數組中所以數字都在[0, n-1]區間范圍內,因此哈希表的大小為n。因此我們實際要做的就是對n個范圍為0到n-1的數進行哈希,而哈希表的大小剛好為n。對排序算法比較熟悉的同學不難發現這與一種經典的排序算法(基數排序)非常類似。而基數排序的時間空間復雜度剛好符合題目要求。因此嘗試使用基數排序來解這道面試題。

這里寫圖片描述
這里寫圖片描述

#include <iostream>
    #include <algorithm>
    using namespace std;

    class Solution {
    public:
        int IsReplication(int a[],int n){
            if(n <= 0){
                return -1;
            }//if
            for(int i = 0;i < n;){
                if(a[i] != i){
                    // 存在重復元素
                    if(a[i] == a[a[i]]){
                        return a[i];
                    }//if
                    swap(a[i],a[a[i]]);
                }//if
                else{
                    ++i;
                }//else
            }//for
            return -1;
        }
    };

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



猜您在找 劍指Offer(Java版)第五十六題:在一個長度為n的數組里的所有數字都在0到n-1的范圍內。 數組中某些數字是重復的,但不知道有幾個數字是重復的。 也不知道每個數字重復幾次。請找出數組中任意一個重復的數字。 例如,如果輸入長度為7的數組{2,3,1,0,2,5,3},那么對應的輸出是第一個重復的數字2。 面試題3:在一個長度為n的數組里的所有數字都在0到n-1的范圍內。 數組中某些數字是重復的,但不知道有幾個數字是重復的。也不知道每個數字重復幾次。請找出數組中任意一個重復的數字。 例如,如果輸入長度為7的數組{2,3,1,0,2,5,3},那么對應的輸出是第一個重復的數字2。 在一個長度為n的數組里的所有數字都在0到n-1的范圍內。 數組中某些數字是重復的,但不知道有幾個數字是重復的。也不知道每個數字重復幾次。請找出數組中任意一個重復的數字。 例如,如果輸入長度為7的數組{2,3,1,0,2,5,3},那么對應的輸出是重復的數字2或者3 劍指offer(Java版)第一題:在一個長度為n的數組里的所有數字都在0到n-1的范圍內。 數組中某些數字是重復的,但不知道有幾個數字重復了,也不知道每個數字重復了幾次。 *請找出數組中任意一個重復的數字。 *例如,如果輸入長度為7的數組{2, 3, 1, 0, 2, 5, 3},那么對應的輸出是重復的數字2或者3。 面試題:給定一個長度為N的數組,其中每個元素的取值范圍都是1到N。判斷數組中是否有重復的數字 找出數組中重復的數字 1、找出數組中重復的數字 找出數組中重復的數字 數組中重復的數字 如何把一個整型數組中重復的數字去掉
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM