Leetcode(初级算法):存在重复元素
题目
给定一个整数数组,判断是否存在重复元素。
如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。
思路
思路一
最初的思路是每个元素都进行比较,即进行两次for循环,如果两个数相减为0,表示有重复的元素,直接返回true,退出所有循环 。但是这个思路真的有点low,第一次提交只击败了7%的人,可见还需改进算法。
代码
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
int len = nums.size();
bool flag=false;
for(int i=0;i<len;i++)
{
for(int j=i+1;j<len;j++)
{
if(nums[i]-nums[j]==0)
{
flag=true;
break;
}
}
}
return flag;
}
};
思路二
先进行排序,再比较前后两个元素是否相等,来判断是否有重复元素。这种思路比上一个思路快很多,并且运行之后击败了94%的人
代码
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
int len = nums.size();
bool flag=false;
sort(nums.begin(),nums.end());
for(int i=1;i<len;i++)
{
if(nums[i-1]==nums[i])
{
flag =true;
}
}
return flag;
}
};
思路一和思路二的时间对比
其他
在统计图上还看到只用了12ms的大佬,附上他的代码
感觉他的思路是在我所说的思路二上加了最下面那段。。。
不得不说下面那段真的好神奇!
有人做了说明,可以看看:https://blog.csdn.net/qq_32320399/article/details/81518476