存在重复---简单

题目:

  给定一个整数数组,判断是否有重复元素。如果任何值在数组出现至少两次,函数返回true。如果数组中每个元素都不相同,返回false。

示例:

  输入: [1,2,3,1]

  输出: true

  输入: [1,2,3,4]

  输出: false

思路:

  很容易想到用O(n^2)的算法,也可以先用nlogn的算法先排序再遍历,有没有突破这个限制的解法呢?暂时想不出来,先用O(n^2)的试试看再看看大佬的吧。

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

  结果惨不忍睹呢,来看看大佬的吧:

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

  看来大佬是用了后一种思路呢,先用标准库的sort快排先排序,再遍历。复杂度为O(nlogn)

原文地址:https://www.cnblogs.com/manch1n/p/10305142.html