LeetCode:287. Find the Duplicate Number

一、問題描述

Given an array nums containing n + 1 integers where each integer is between 1 and n (inclusive), prove that at least one duplicate number must exist. Assume that there is only one duplicate number, find the duplicate one.

Example 1:

Input: [1,3,4,2,2]
Output: 2

Example 2:

Input: [3,1,3,4,2]
Output: 3

Note:

  1. You must not modify the array (assume the array is read only).
  2. You must use only constant, O(1) extra space.
  3. Your runtime complexity should be less than O(n2).
  4. There is only one duplicate number in the array, but it could be repeated more than once.

二、解題思路

使用set(因爲涉及到查找,所以使用了底層是哈希表的unordered_set),遍歷一遍數組,如果這個值在set中存在,直接return;不存在的話,添加到set中

三、代碼實現(時間複雜度O(N))

#include<unordered_set>
class Solution {
public:
    int findDuplicate(vector<int>& nums) {
        unordered_set<int> result;
        for(int num:nums){
            if(result.find(num) != result.end()){
                return num;
            }else {
                result.insert(num);
            }
        }
        return -1;
    }
};

說明其它的幾種解題方法:

①排序後,判斷當前元素和後一個是否相等,相等的話就找到了。但是這種方法的時間複雜度是:O(NlogN)

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