/**
* 【題目描述】
* 在乙個長度為n的陣列裡的所有數字都在0到n-1的範圍內。 陣列中某些數字是重複的,但不知道有幾個數字是重複的。
* 也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。
* 例如,如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。
* 規律:題目中明確指出n個數字,其取值範圍在0到n-1之間,所以可以認為
* 如果都不相等,則陣列下標總能找到和其一致的數字
* 如果存在重複的,則某些陣列下標應有乙個以上的數字與之相一致
* 所以我們通過找與下標一致的數字,如果當前下標中放得數字與下標不一致,則看該數字對應的下標中的數字是否和當前下標中的數字是否一致
* 若一致,則輸出,並找下乙個重複數字
* 若不一致,則交換兩個下標對應的數字,並重複此過程
* 這樣,數字都落在與其一致的下標中,只有重複的數字,會落在其他與其不一致的(重複次數-1)下標中
*/public
class
solution
// 存在重複數字,起碼有兩個以上的數字才可以
int len = array.length;
if(len <2)
// 數字中的數字範圍在0到len-1之間,否則就認為是個錯誤的陣列,不考慮重複數字問題
for(
int i =
0; i < len; i++)}
// 比如
// array[0] = 2,不一致,array[2] = 1, 不相等,則交換,得到
// array[0] = 1,不一致,array[1] = 3, 不相等,則交換,得到
// array[0] = 3,不一致,array[3] = 0, 不相等,則交換,得到
// array[0] = 0,一致,現在下標0中存放了預期一致的數字,結束下標0的操作
// array[1] = 1,一致,現在下標1中存放了預期一致的數字,結束下標1的操作
// array[2] = 2,一致,現在下標2中存放了預期一致的數字,結束下標2的操作
// array[3] = 3,一致,現在下標3中存放了預期一致的數字,結束下標3的操作
// array[4] = 2,不一致,array[2] = 2,相等輸出結果,無需交換,結束下標4的操作,此時
// array[5] = 5,一致,現在下標5中存放了預期一致的數字,結束下標5的操作
// array[6] = 3,不一致,array[3] = 3,相等輸出結果,無需交換,結束下標4的操作,此時
for(
int i =
0; i < len; i++
)else}}
return;}
}/**
*或者如下
*/public
class
solution
tempval = numbers[i]
; numbers[i]
= numbers[tempval]
; numbers[tempval]
= tempval;}}
return
false;}
}
劍指offer Java 陣列中的逆序對
在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數p。並將p對1000000007取模的結果輸出。即輸出p 1000000007 注意點 public class solution return count private vo...
劍指Offer Java版 持續更新中
public boolean find int target,int array int rows array.length int columns array 0 length if rows 0 columns 0 else if array row column target else ret...
劍指offer Java 替換空格
注意點 public class solution int indexold str.length 1 indexold為為替換前的str下標 int newlength str.length spacenum 2 計算空格轉換成 20之後的str長度 int indexnew newlength ...