Contains Duplicate - LeetCode 217

本文介绍了一种通过使用集合或映射来判断数组中是否存在重复元素的方法,并提供了两种不同的实现方式,一种是使用集合,另一种是先对数组进行排序再检查相邻元素。
题目描述:
Given an array of integers, find if the array contains any duplicates. Your function should return true if any value appears at least twice in the array, and it should return false if every element is distinct.

Hide Tags Array Hash Table

分析:
要判断是否含有重复的元素,也就是要求是否有元素出现了不止一次。有多种思路可以实现这个目标。
方法一、用一个set。遍历一遍数组,检查当前的set中是否已经含有当前元素,若含有,则表示有重复,否则就将当前元素放人set中,继续下一个元素。当然,把set换成map也是可以的,二者的效率相当,都挺慢的。
方法二、先将数组排序,然后遍历数组,检查相邻的元素是否相等,若有相等的元素,则表示有重复,否则没有重复。

以下是C++实现代码:

/*///方法一:set//////////124ms*/
class Solution {
public:
    bool containsDuplicate(vector<int>& nums) {
        if(nums.empty())
            return false;
        set<int> s;
        vector<int>::iterator itr = nums.begin();
        while(itr != nums.end())
        {
            if(s.count(*itr)==1)
                return true;
            s.insert(*itr);
            itr++;
        }
        return false;
    }
};

/*//方法一:map/////////////120ms//*/
class Solution {
public:
    bool containsDuplicate(vector<int>& nums) {
        if(nums.empty())
            return false;
        map<int,int> m;
        vector<int>::iterator itr = nums.begin();
        while(itr != nums.end())
        {
            if(m.count(*itr)==1)
                return true;
            m.insert(make_pair(*itr,1));
            itr++;
        }
        return false;
    }
};

/*///方法二:先排序后检查///////36ms///*/
class Solution {
public:
    bool containsDuplicate(vector<int>& nums) {
        int size = nums.size();
        if(size < 2)
            return false;
        sort(nums.begin(),nums.end());
        
        int i = 1;
        while(i != size)
        {
            if(nums[i] == nums[i-1])
                return true;
            i++;
        }
        return false;
    }
};


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值