Contains Duplicate

问题描述:

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.

由于之前有写过去处重复元素的题,所以这道题拿到之后第一反应就是给数组排序,然后排完序之后的数组,就很好操作了,从下标1开始看有没有元素和它前面的元素一样。基于这样子的思路,有了下面这段代码

class Solution {
public:
    bool containsDuplicate(vector<int>& nums) {
        size_t n = nums.size();//先计算出数组的长度,不用在for循环的括号里面每一次的计算
        sort(nums.begin(), nums.end());//将数组进行排序
        for (size_t i = 1; i < n; i++){
            if(nums[i] == nums[i-1]) return true;//能到这里,说明至少有两个元素是一样的,即数组是有重复的。函数返回真
        }
        return false;
    }
};

运行时间还是可以接受的大概在中上水平吧,由于今天刚学习了C++的map知识。想到了如果用map实现一下会怎么样呢?(不是说map的底层时红黑数实现的么,比较牛逼的意思啦)

于是用map实现的代码如下:

class Solution {
public:
    bool containsDuplicate(vector<int>& nums) {
        unordered_map <int, int> nums2Map;//定义一个map容器
        size_t n = nums.size();//理由同上
        for(size_t i = 0; i < n; i++){
            if(nums2Map.find(nums[i]) != nums2Map.end()) return true;//如果find函数返回值不是容器.end(),说明有重复
            nums2Map[nums[i]]++;//如果没有找到,将给元素添加到容器里面,键为nums[i],值为1
        }
        return false;
    }
};


执行结果就懵逼了,,,还没上面的代码快,估计map的优势不是在这里。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值