LeetCode-287:尋找重複數

一、題目描述

在這裏插入圖片描述

二、解題思路

這是劍指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)才擊敗了百分之五。。。。。。。。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章