leetcode 217 Contains Duplicate 数组中是否有重复的数字


Contains Duplicate
Total Accepted: 26477
Total Submissions: 73478 My Submissions

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.

我的解决方案:很显然不是最优的,记录每个插入的状态,看起来也不是很简洁,但是对于方案二的优势是在对于长数组时候,第一个有重复的数字就退出了

class Solution {
public:
    bool containsDuplicate(vector<int>& nums)
    {
        set<int> result;

         set<int>::iterator itor ;

    for(int i = 0;i< nums.size();++i)
    {
        itor = result.find(nums[i]) ;

        if(itor != result.end())
        {
            return true;
        }
        else
        {
            result.insert(nums[i]);
        }
    }

    return false;

    }
};

非常简洁的解决方案,类似python 了,但是stl 中的set是基于平衡树的,而python中是hash树,所以python可能会高效一些

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

python 的版本:

class Solution:
    def containsDuplicate(self, nums):
        return len(nums) > len(set(nums))

c++ 的hash版本:同类的hash code是相同的,这是一个非常重要的编程思想

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

c++排序版本:

+2 votes
942 views
class Solution {
public:
    bool containsDuplicate(vector<int>& nums)
    {
        int size=nums.size();
        sort(nums.begin(),nums.end());
        nums.erase(unique(nums.begin(),nums.end()),nums.end());
        return (size!=nums.size());
    }
};

+4 votes
Your running time is 28ms, if not use unique, it will be 24ms:
class Solution {
public:
    bool containsDuplicate(std::vector<int>& nums) {
        std::sort(nums.begin(), nums.end());
        for (int i = 1; i < nums.size(); ++i)
            if (nums[i] == nums[i - 1])
                return true;
        return false;
    }
};
时间: 2024-10-16 18:19:49

leetcode 217 Contains Duplicate 数组中是否有重复的数字的相关文章

ios6-检测数组中的条目重复几次

问题描述 检测数组中的条目重复几次 检测数组中的条目重复多少次.数组如下: "Family:0", "Family:0", "Family:0", "Gold:3", "Gold:3" 因此返回的条目数应该是3和2.应该怎么实现?我试过的代码(当然没实现): int occurrences = 0; int i=0; for(NSString *string in arrTotRows){ occurren

如何在结构体数组中删掉重复值

问题描述 如何在结构体数组中删掉重复值 假如结构体数组中的数据为:3 3 5 5 5 3 7 0 2 5 ,删除后的结构体数组中的数据为:3 5 3 7 0 2 5 解决方案 用个土方法吧,先吧结构体的数据截取出来,放在数组里遍历.在截取该数组的足后一个对象来遍历比较是否有相同的,有就删除,没有就吧该对象存放在新的数组中. 解决方案二: 如果你的数据最大小于数组的长度则可以这样实现.思想: 根据拆装箱思想,先统计各个数据重复个数,再删除重复数据 #include #include using n

找出数组中出现次数最多的数字

package cc; //找出数组{ 3, 4, 1, 5, 3, 1, 4, 5, 4, 3 }中出现次数最多的数字 //1 建立一个新数组,长度与原数组一致,然后将每个数字出现的次数存入此数组 //2 找出此数组中的最大值,尤其关注的是此最大值的下标 public class ArrayCount { public static void main(String[] args) { int test[] = new int[] { 1, 2, 3, 2, 3, 3 }; Arr arr =

《剑指offer》-数组中出现次数超过一半的数字

/* 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2.如果不存在则输出0. */ class Solution { public: /* 最开始的想法:排序后,假如存在元素满足题目条件,那么中间位置的元素就是这样的元素,那么双向增长,判断增长停滞点之间的长度 缺点是复杂度过高 int MoreThanHalfNum_Solution(vector<int>

LeetCode 26 Remove Duplicates from Sorted Array(从已排序数组中移除重复元素)

翻译 给定一个已排序的数组,删除重复的元素,这样每个元素只出现一次,并且返回新的数组长度. 不允许为另一个数组使用额外的空间,你必须就地以常量空间执行这个操作. 例如, 给定输入数组为 [1,1,2] 你的函数应该返回length = 2, 其前两个元素分别是1和2.它不关心你离开后的新长度. 原文 Given a sorted array, remove the duplicates in place such that each element appear only once and re

[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. 先排序,然后判断.Accept. public boolean contain

JS判断数组中是否有重复值得三种实用方法_javascript技巧

方法一: 复制代码 代码如下: var ary = new Array("111","22","33","111"); var s = ary.join(",")+","; for(var i=0;i<ary.length;i++) { if(s.replace(ary[i]+",","").indexOf(ary[i]+",&qu

JavaScript实现找出数组中最长的连续数字序列_javascript技巧

原始题目: 给定一个无序的整数序列, 找最长的连续数字序列. 例如: 给定[100, 4, 200, 1, 3, 2], 最长的连续数字序列是[1, 2, 3, 4]. 小菜给出的解法: function maxSequence(array,step){ var _array = array.slice(), //clone array _step = 1, _arrayTemp = [], i = 0; var parseLogic = { //result container parseRe

java在已经排好的数组中找出连续的数字

问题描述 纸牌游戏,一共5张牌,怎么找出连续的牌.我知道分好几种情况,5张牌不同,组成234564张牌13456或者12347或者33456(两个3算两个连续的情况)感觉有好多种情况分析,不知道该怎么写..求高手指点 解决方案 解决方案二:看得不是很明白,只要有连续的就算连续的情况吗?那个3算两个连续是什么0.0