LeetCode#217 Contains Duplicate

1、首先,范围在整数内,且有可能不连续,因此考虑提取最大元素与最小元素,构造一个能够为原数组中正负所有元素索引的空间,max+(min < 0 ? abs(min) : 0) + 1 作为大小,对每一个nums[i] 对应的位置标记(注意min为负数导致的偏移)。
2、利用hash表也是一种思路
3、vector有min_element()函数,用迭代器确定位置,可以写成begin(arr)也可以写成arr.begin(),返回迭代器,使用时要解引用;

class Solution {
public:
    bool containsDuplicate(vector<int>& nums) {
        if(nums.empty() || nums.size() == 1)
            return false;
        vector<int>::iterator iterMax, iterMin;
        iterMax = max_element(nums.begin(), nums.end());
        iterMin = min_element(begin(nums), end(nums));
        int maxEle = *iterMax;
        int minEle = *iterMin;
        if(minEle < 0)
            minEle = -minEle;
        else
            minEle = 0;
        int flagSize = maxEle + minEle + 1;
        vector<int> flag(flagSize, 0);
        for(int i = 0; i < nums.size(); i++){
            if(flag[nums[i] + minEle] == -1)
                return true;
            flag[nums[i] + minEle] = -1;
        }

        return false;
    }
};
class Solution {
public:
    bool containsDuplicate(vector<int>& nums) {
        unordered_set<int> visited;
        for(int i = 0; i < nums.size(); i++){
            if(visited.find(nums[i]) == visited.end())
                visited.insert(nums[i]);
            else
                return true;
        }
        return false;

    }
};

猜你喜欢

转载自blog.csdn.net/rpybd/article/details/82432858
今日推荐