第一題陣列中重複的數字
題目描述
在乙個長度為n的陣列裡的所有數字都在0到n-1的範圍內。 陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。 例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。
分析: 由於題目要求時間複雜度 o(n),空間複雜度 o(1)。因此不能使用排序的方法,也不能使用額外的標記陣列。
我想到了兩個方法 第乙個方法是用字串api
public boolean duplicate(int numbers , int length , int duplication)
for(int j = 0; j < length; j++)
return false;
}
其實我感覺這個方法有一點取巧,就是先把陣列變成字串 然後查第一次出現numbers[j] 和最後一次出現numbers[j]的位置是不是同乙個位置,如果是,那麼就返回這個數
還有一種方法是這樣,就是檢視你當前的數是不是在你這個數的位置上
舉例來說,2,3,1,0,2,5,3 首先把2 放到2 的位置上 3 放到3的位置上 1 放到1 的位置上 0 放到0 的位置上 ,然後這時候2 想放到2 的位置上,發現已經有乙個2了,說明2 就是乙個重複的數,後邊的3同理
我們開始寫**
public boolean duplicate(int nums , int length , int duplication)
swap(nums , i , nums[i]);
}} return false; }
public void swap(int nums , int i , int j)
劍指Offer系列 03 陣列中重複的數字
找出陣列中重複的數字。在乙個長度為 n 的陣列 nums 裡的所有數字都在 0 n 1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。示例 1 輸入 2,3,1,0,2,5,3 輸出 2 或 3 限制 2 n 100000 c...
劍指offer系列 50 陣列中重複的數字
q 在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。t 1.用hash。因為不用記錄數目,可以建立bool的陣列,b...
劍指offer系列之49 陣列中重複的數字
題目描述 在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。思路 此題的思路還是比較簡單的,與之前找出只出現一次的數字...