劍指offer系列 (陣列中重複的數字)

2021-09-17 01:26:44 字數 914 閱讀 3691

第一題陣列中重複的數字

題目描述

在乙個長度為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。思路 此題的思路還是比較簡單的,與之前找出只出現一次的數字...