文章目錄
- 題目描述
- 代碼實現
題目描述
在一個長度為 n 的數組 nums 里的所有數字都在 0~n-1 的范圍內。數組中某些數字是重復的,但不知道有幾個數字重復了,也不知道每個數字重復了幾次。請找出數組中任意一個重復的數字。
輸入:
[2, 3, 1, 0, 2, 5, 3]
輸出:2 或 3
限制:
2 <= n <= 100000
代碼實現
如果下標 i 存儲的是 j,下標 j 中存儲的還是 j,則說明 j 重復出現。
int findRepeatNumber(vector<int>& nums){for(int i=0; i < nums.size(); i++){while(nums[i] != i){ // 下標i中存儲的不是i,而是jint temp = nums[i];if(temp == nums[temp]){ // 下標j中存儲的是jreturn temp; // throw repeat number}else{ // 下標j中存儲的也不是jswap(nums[i], nums[temp]); // 交換下標j和下標i中的值,讓下標j中是j}}}return -1; // find't repeat number
}