LeetCode 217 存在重复元素
1.题目描述:
给定一个整数数组,判断是否存在重复元素。
如果存在一值在数组中出现至少两次,函数返回 true
。如果数组中每个元素都不相同,则返回 false
。
示例一:
输入: [1,2,3,1]
输出: true
示例 二:
输入: [1,2,3,4]
输出: false
2.题解:
方法一:排序 将元素调用库函数进行排序,相同元素必定保持相邻关系
时间复杂度: O(NlogN), 其中N为数组长度,需要对数组进行排序。
**空间复杂度:**O(logN)
c++:
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
sort(nums.begin(), nums.end()) ;
//注意数组越界
for (int i =0 ; i < nums.size()-1; i++) {
if(nums[i] == nums[i+1])
return true ;
}
return false;
}
};
Golang:
func containsDuplicate(nums []int) bool {
sort.Ints(nums)
for i:= 0; i < len(nums)-1; i++ {
if nums[i] == nums[i+1] {
return true
}
}
return false
}
方法二:哈希表 将原先的数组元素插入哈希表。如果当插入的元素在哈希表的中存在时,则说明存在重复元素。
时间复杂度:O(N),其中N为数组长度;
空间复杂度:O(N),其中N为数组长度。
C++:
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
unordered_set<int> s ;
for (auto x: nums ) {
if (s.find(x) != s.end()) {
return true ;
}
s.insert(x) ;
}
return false;
}
};
Golang:
func containsDuplicate(nums []int) bool {
set := map[int]struct{}{}
for _, v := range nums {
if _, has := set[v] ; has{
return true
}
set[v] = struct{}{}
}
return false
}
原题:存在重复元素