【題目】
在乙個長度為n的陣列裡的所有數字都在0到n-1的範圍內。 陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。 例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2
【思路】
1、排序
將陣列排序,然後掃瞄排序後的陣列即可。
時間複雜度:o(nlogn),空間複雜度:o(1)
2、雜湊表
從頭到尾掃瞄陣列,每掃瞄到乙個數字,判斷該數字是否在雜湊表中,如果該雜湊表還沒有這個數字,那麼加入雜湊表,如果已經存在,則返回該數字;
時間複雜度:o(n),空間複雜度:o(n)
3、交換
0~n-1正常的排序應該是a[i]=i;因此可以通過交換的方式,將它們都各自放回屬於自己的位置;
從頭到尾掃瞄陣列a,當掃瞄到下標為i的數字m時,首先比較這個數字m是不是等於i,
如果是,則繼續掃瞄下乙個數字;
如果不是,則判斷它和a[m]是否相等,如果是,則找到了第乙個重複的數字(在下標為i和m的位置都出現了m);如果不是,則把a[i]和a[m]交換,即把m放回屬於它的位置;
重複上述過程,直至找到乙個重複的數字;
時間複雜度:o(n),空間複雜度:o(1)
(將每個數字放到屬於自己的位置最多交換兩次)
【**】
public
static
void
main(string args) ,6,dup);
system.out.println(dup[0]);
} //陣列中重複的數字
//雜湊表判斷,時間複雜度:o(n),空間複雜度:o(n)
public
static
intisrepeable(int arr)
hashmapmap=new hashmap();
for(int i=0;iif(map.keyset().contains(arr[i]))
map.put(arr[i],1);
}return -1;
}//交換法,時間複雜度:o(n),空間複雜度:o(1)
public
static
boolean
isrepeable1(int arr,int len,int dup)
for(int i=0;iwhile(arr[i]!=i)
//arr[i]!=arr[m],則交換,使arr[m]=m
int temp=arr[i];
arr[i]=arr[temp];
arr[temp]=temp;}}
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 因為陣列中...