题目:
给定一个整数数组,判断是否有重复元素。如果任何值在数组出现至少两次,函数返回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)