劍指offer Java陣列中重複的數字

2021-09-23 18:37:54 字數 1613 閱讀 4968

/**

* 【題目描述】

* 在乙個長度為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 ...