陣列中重複的數字

2021-08-22 19:23:43 字數 1655 閱讀 9682

在乙個長度為n的陣列裡的所有數字都在0到n-1的範圍內。 陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。 例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。

輸入包括三個引數:陣列、陣列長度、待求的任意乙個重複的數字;

輸出:如果有重複的數字,則為真,否則為假。

建立乙個陣列,將其元素初始化為0,用於儲存原陣列的中每種元素出現的個數,遍歷原陣列,統計每一種元素出現的個數,當元素個數大於1時,取出該元素,返回真,找不到元素個數大於1的元素,返回假

注:陣列一定要初始化為0,否則陣列元素的值不確定

class solution 

;for

(int i=

0;i) has[numbers[i]]++

;for

(int i=

0;ireturn false;}}

;

缺點:不知道建立陣列時,不知道建立多大的陣列

時間複雜度:o(n),空間複雜度:o(n)

現在用關聯容器map代替陣列,將元素統計進關聯容器map中,如果元素個數大於1(m.second>1),則元素值(m.first)就是要找的重複元素

class solution 

}return false;}}

;

時間複雜度:o(n),空間複雜度:o(n)

0~n-1正常的排序應該是a[i]=i;因此可以通過交換的方式,將它們都各自放回屬於自己的位置;

從頭到尾掃瞄陣列a,當掃瞄到下標為i的數字m時,首先比較這個數字m是不是等於i,如果是,則繼續掃瞄下乙個數字;如果不是,則判斷它和a[m]是否相等,如果是,則找到了第乙個重複的數字(在下標為i和m的位置都出現了m);如果不是,則把a[i]和a[m]交換,即把m放回屬於它的位置;

重複上述過程,直至找到乙個重複的數字;

(將每個數字放到屬於自己的位置最多交換兩次)

class solution 

for(

int i=

0;i)else

swap

(numbers[i]

,numbers[numbers[i]])

;}}return false;}}

;

時間複雜度:o(n),空間複雜度:o(1)

將陣列排序,然後掃瞄排序後的陣列即可。

class solution 

sort

(numbers,numbers+length)

;for

(int i=

0;i1;i++)}

return false;}}

;

時間複雜度:o(nlogn),空間複雜度:o(1)

將每乙個元素 c 作為下標訪問對應下標的元素 numbers[|c|],如果 numbers[|c|] >= 0,表示元素 c 至今只出現一次,繼續遍歷,當 numbers[|c|] < 0 時,說明元素 c 已經第二次出現,找到了重複的數字。

class solution 

}*duplication =-1

;return false;}}

;

陣列 陣列中重複的數字

在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。思路 python 實現 an highlighted block ...

陣列中重複的數字

在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道哪幾個 數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。例如 如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。include iostream using namespace ...

陣列中重複的數字

題目 在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。思路 用雜湊表解決的時間複雜度和空間複雜度為o n 因為陣列中...