1、陣列中重復的數字
在一個長度為 n 的陣列 nums 里的所有數字都在 0~n-1 的范圍內,陣列中某些數字是重復的,但不知道有幾個數字重復了,也不知道每個數字重復了幾次,請找出陣列中任意一個重復的數字,
示例 1:
輸入:
[2, 3, 1, 0, 2, 5, 3]
輸出:2 或 3
限制:
2 <= n <= 100000
來源:力扣(LeetCode)
https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof/
思路:
從前往后遍歷,每個數都會有自己對應的坑位(==元素對應陣列的下標)如果發現當前的坑位的數與對應的坑位上的數是不一樣的,那么它就應該回去自己的坑位上, 并且繼續判斷, 如果發現對應坑位已經是該有的數了,那么就可以判斷一下它兩是不是重復了,
字有點丑,,,將就一下

代碼實作:
class Solution {
public:
int findRepeatNumber(vector<int>& nums) {
for(int i = 0; i < nums.size(); i ++ ) {
while(i != nums[i] && nums[nums[i]] != nums[i]) swap(nums[i], nums[nums[i]]); //不斷的回去自己的坑位
if(i != nums[i] && nums[i] == nums[nums[i]]) return nums[i];
}
return -1; //我沒有用處,特殊出口
}
};
其實為什么要全部遍歷完呢,因為一開始本身那個數是有可能是對的,所以要從前往后遍歷完為止,
這種情況要自己推一遍案例哈,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/238102.html
標籤:其他
下一篇:理想的開放自動化
