續上篇找出陣列中的重複數字
**方法二:**利用合適的演算法進行計算。
首先先想到這個規律,就是如果陣列是有序的並且元素不重複,那麼第i個位置的元素應該是i。如果第i個位置的元素不是i,就說明陣列中是存在重複數字的。
利用下面的演算法:
比較i和arr[ i ],如果相等,說明i(arr[ i ])在正確的位置;如果不相等,就比較arr[ i ]和arr[arr[ i ]],如果這兩個值相等,說明找到重複數字arr[ i ];如果不相等,就需要把arr[ i ]放到應該放的位置,即交換arr[ i ]和arr[arr[ i ]]的值。
下面是**部分:
public
class
arrrept
; system.out.
println
(arrrept
(arr));
}//實現找到陣列中重複元素的方法
public
static
boolean
arrrept
(int
arr)
for(
int j=
0;jfor(
int i=
0;i)int m = arr[i];if
(arr[m]
==m)
else
}return
true;}
}
找出陣列中重複數字
題目 在乙個長度為n的陣列裡所有數字都在 0 n 1 的範圍內,找到陣列中的重複數字。思路 看到問題之後的直接想法是將輸入的陣列排序,排序後找到重複數字是一件很容易的事情。可是排序乙個長度為n的陣列需要 o nlogn 的時間。為了降低時間複雜度,考慮用雜湊表來解決。方案就是先建立乙個和陣列等長的雜...
陣列中重複數字
題目描述 在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中第乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。返回描述 如果陣列中有重複的數字,函式返回true,否則返回...
陣列中的重複數字
在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。1 排序 將陣列排序,然後掃瞄排序後的陣列即可。時間複雜度 o nl...