LeetCode 217. Contains Duplicate 解题报告

来源:互联网 发布:商品条码数据库下载 编辑:程序博客网 时间:2024/04/19 21:05

LeetCode 217. 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.


示例

没有给出。


限制条件

没有明确给出。


解题思路

我的思路:

很简单的思路。先对数组排序,然后从第2个元素开始,遍历排序后的数组,如果当前元素与前一元素相同,返回true,否则继续遍历下一元素,直到数组结尾。默认返回false。

这道水水的题目,除了排序还能用哈希的思想去完成,当然暴力破解也是可以的。

其他思路

使用unordered_set保存出现过元素。有三种实现方式:
第一种:遍历数组,如果数组元素没有在unordered_set中出现则添加到unordered_set中,如果已存在就直接返回true。默认也是返回false。见其他代码1

第二种:遍历数组,把每个元素都插入到unordered_set中,inder函数返回的是一个pair,其中pair.second表示插入是否成功,利用这个布尔量,当插入失败时,表明unordered_set中已有相同元素,返回true。默认返回false。见其他代码2

第三种:直接把数组元素作为参数,构建一个unordered_set,由于unordered_set不存在重复元素,所以判断unordered_set的长度与数组长度是否相同,相同返回false,不相同返回true。见其他代码3


代码

我的代码

class Solution {public:    bool containsDuplicate(vector<int>& nums) {        sort(nums.begin(), nums.end());        for (int i = 1; i < nums.size(); i++)            if (nums[i] == nums[i -1])                return true;        return false;    }};

其他代码1

class Solution {public:    bool containsDuplicate(vector<int>& nums) {        unordered_set<int> number;        for (auto n: nums)            if (number.find(n) != number.end())                return true;            else                number.insert(n);        return false;    }};

其他代码2

class Solution {public:    bool containsDuplicate(vector<int>& nums) {        unordered_set<int> number;        for (auto n: nums)            if (!number.insert(n).second)                return true;        return false;    }};

其他代码3

class Solution {public:    bool containsDuplicate(vector<int>& nums) {        return nums.size() > unordered_set<int>(nums.begin(), nums.end()).size();    }};

总结

这道题很简单,所以题目本身没什么好讲的,倒是大牛们的各种实现让我学习了很多,尤其是其他代码2和3,这样的实现方式,虽然可能效率不高,但是里面体现的细节却值得我去学习记忆。
又一道水题被填了,今天先到这里,明天填坑继续,加油!

0 0