面試題:給定一個長度為N的數組,其中每個元素的取值范圍都是1到N。判斷數組中是否有重復的數字


題目:定一個長度為N的數組,其中每個元素的取值范圍都是1到N。判斷數組中是否有重復的數字。(原數組不必保留)

方法1.
對數組進行排序(快速,堆),然后比較相鄰的元素是否相同。
時間復雜度為O(nlogn),空間復雜度為O(1)。

方法2.
使用bitmap方法。
定義長度為N/8的char數組,每個bit表示對應數字是否出現過。遍歷數組,使用 bitmap對數字是否出現進行統計。
時間復雜度為O(n),空間復雜度為O(n)。

方法3.
遍歷數組,假設第 i 個位置的數字為 j ,則通過交換將 j 換到下標為 j 的位置上。直到所有數字都出現在自己對應的下標處,或發生了沖突。
時間復雜度為O(n),空間復雜度為O(1)。

方法3示例代碼如下

#include<iostream>
#include<ctime>
using namespace std;
//判斷數組中是否包含重復數字
const int MAX= 10;

bool isDuplicate(int val[])
{
    for(int i=0;i<MAX;i++)
    {
        if(val[i]!=i)
        {
            if(val[i] != val[val[i]])
                swap(val[i],val[val[i]]);
            else
                return true;
        }
    }
    return false;
}

int main()
{
    int val[MAX];
    srand((unsigned)time(NULL));

    cout<<"init data:"<<endl;
    for(int i=0;i<MAX;i++)
    {
        int tmp=rand()%MAX;
        val[i]=tmp;
        cout<<tmp<<" ";
    }
    cout<<endl;
    bool flag=isDuplicate(val);

     if(flag)  
        cout << "has duplicate elem" << endl;  
    else  
        cout << "no duplicate elem" << endl;  

}

srand((unsigned)time(NULL));

time()頭文件為ctime.這句話不要程序每次運行結果都一樣。

 


免責聲明!

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



猜您在找 面試題3:在一個長度為n的數組里的所有數字都在0到n-1的范圍內。 數組中某些數字是重復的,但不知道有幾個數字是重復的。也不知道每個數字重復幾次。請找出數組中任意一個重復的數字。 例如,如果輸入長度為7的數組{2,3,1,0,2,5,3},那么對應的輸出是第一個重復的數字2。 劍指Offer(Java版)第五十六題:在一個長度為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的數組里的所有數字都在0到n-1的范圍內。 數組中某些數字是重復的,但不知道有幾個數字是重復的。也不知道每個數字重復幾次。請找出數組中任意一個重復的數字。 例如,如果輸入長度為7的數組{2,3,1,0,2,5,3},那么對應的輸出是重復的數字2或者3。 python3面試題-一個包含n個整數的數組a,判斷a中是否存在三個元素,a,b,c,使得a+b+c=0 面試題-python3 個包含n個整數的數組nums,判斷nums中是否存在三個元素,a,b,c,使得a+b+c=0 Leetcode練習(Python):第448題:找到所有數組中消失的數字:給定一個范圍在 1 ≤ a[i] ≤ n ( n = 數組大小 ) 的 整型數組,數組中的元素一些出現了兩次,另一些只出現一次。 編寫一個js函數,該函數有一個n(數字類型),其返回值是一個數組,該數組內是n個隨機且不重復的整數,且整數取值范圍是[2,32] 長為N的數組,元素范圍是0-N-1,其中只有一個數是重復的,找出這個重復元素
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM