劍指offer 陣列中重複的數字

2022-01-26 07:33:10 字數 1102 閱讀 5325

在乙個長度為n的陣列裡的所有數字都在0到n-1的範圍內。 陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。 例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。

先將陣列排序,然後遍歷陣列,兩個相鄰的值相同則存在重複數字。

遍歷陣列,使用hashset儲存每個元素,如果出現相同元素,說明存在重複值。

public boolean duplicate(int numbers, int length, int duplication) 

}hashsetset = new hashset<>();

for (int i = 0; i < length; i++)

set.add(numbers[i]); //新增每個元素到set

}return false;

}

利用元素數字都在0到n-1的範圍內的特點,若不存在重複數字,則排序後的數字就在與其相同的索引值的位置,即數字i = numbers[i]。順序掃瞄陣列,判斷當前數字是否滿足numbers[i] = i,如果不滿足,則說明這個數字不在對應的位置上,於是將numbers[i]numbers[numbers[i]]交換,如果掃瞄某個數字的過程中發現numbers[i]=numbers[numbers[i]],則說明numbers[i]i位置和numbers[i]位置出現了兩次,所以是重複數字。

public boolean duplicate(int numbers,int length,int  duplication) 

}for(int i=0;iint temp = numbers[i];

numbers[i] = numbers[temp];

numbers[temp] = temp;}}

return false;

}

劍指offer 陣列中重複的數字

題目描述 在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。class solution 考慮這種非法輸入 for i...

劍指offer 陣列中重複的數字

在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。分析 雖然也ac了,但是沒仔細看題,可以利用題目已有條件做到更簡單的...

劍指offer 陣列中重複的數字

題目描述 在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。解析 在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍...