今天继续刷LeetCode,第217题,判断一个数组中是否有重复元素,如果存在重复,则返回true,否则返回false。
分析:
方法一:简单比较,遍历每一个元素的时候,与后面所有元素进行比较,如果存在相同的就返回false,否则继续比较,直到结束。
方法二:以空间换时间,设置一个map映射,如果遍历到的元素在map中,就返回false,否则就在map中添加,这样时间虽然节省了,但是对于数据少的情况,仍然不是最佳选择。
方法三:先对数组进行快速排序,然后判断排序结果中,相邻两个元素是否存在相等的情况,如果存在,那么就返回true,否则继续遍历,直到最后,返回false。在元素种类比较大,数据少的情况下这种方法会方法二好很多。
问题:
1、如何优化时间开销;
2、map、set以及sort的应用。
附上C++方法二代码:
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
unordered_map<int,int> tmp;
for(int i=0;i<nums.size();i++)
{
if(tmp.find(nums[i])==tmp.end())
tmp[nums[i]]++;
else
return true;
}
return false;
}
};
附上C++方法三的代码:
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
if(nums.size()==1)
return false;
sort(nums.begin(),nums.end());
for(int i=1;i<nums.size();i++)
{
if(nums[i-1]==nums[i])
return true;
}
return false;
}
};
附上python方法二的代码:时间开销比较小
class Solution:
def containsDuplicate(self, nums: List[int]) -> bool:
if len(set(nums))==len(nums):
return False
else:
return True
附上python方法三的代码:
class Solution:
def containsDuplicate(self, nums: List[int]) -> bool:
nums_sort=sorted(nums)
for i,_ in enumerate(nums_sort[:-1]):
if nums_sort[i]==nums_sort[i+1]:
return True
return False
本文介绍了LeetCode第217题“数组中是否有重复元素”的三种解法:简单比较、使用map和排序检查。通过代码示例对比了不同方法的时间效率,并探讨了在不同场景下的适用性。
256

被折叠的 条评论
为什么被折叠?



