一、題目描述
二、解題思路
這是劍指Offer的原題。。。。。。評論區用的都是有環鏈表的方法
- 一個蘿唄一個坑兒,如果沒有重複那麼下標與元素值應該可以達成一一對應
- 那麼如果當前下標和元素值不同,那麼我們就不斷地調整,也就是說把這個元素調到它應該在的位置
- 如果發現了它要去的那個地方被一個和它相等的元素佔了,那就直接返回
- over
時間複雜度O(n),空間複雜度S(1)
三、解題代碼
class Solution {
public:
int findDuplicate(vector<int>& nums) {
if(!nums.size()) return -1;
for(int i = 0; i < nums.size(); i++){
while(nums[i] - 1 != i){
if(nums[i] == nums[nums[i] - 1]) return nums[i];
swap(nums[nums[i] - 1], nums[i]);
}
}
return 0;
}
};
四、運行結果
我是真的理解不了爲什麼空間複雜度爲S(1)才擊敗了百分之五。。。。。。。。