Algorithms to Check if Array Contains Duplicate Elements
- 时间:2020-09-12 10:06:27
- 分类:网络文摘
- 阅读:126 次
Given an array of integers, find if the array contains any duplicates.
Your function should return true if any value appears at least twice in the array, and it should return false if every element is distinct.
Example 1:
Input: [1,2,3,1]
Output: true
Example 2:Input: [1,2,3,4]
Output: false
Example 3:Input: [1,1,1,3,3,4,3,2,4,2]
Output: true
Bruteforce Algorithm to Check If Array Contains Duplicates
The bruteforce algorithm: We can iterate over all pairs of numbers, then compare for equality. This takes O(N^2) quadric time, at the cost of a constant space.
Python:
1 2 3 4 5 6 7 | class Solution: def containsDuplicate(self, nums: List[int]) -> bool: for i in range(len(nums)): for j in range(0, i): if nums[i] == nums[j]: return True return False |
class Solution:
def containsDuplicate(self, nums: List[int]) -> bool:
for i in range(len(nums)):
for j in range(0, i):
if nums[i] == nums[j]:
return True
return FalseJava:
1 2 3 4 5 6 7 8 9 10 11 12 | class Solution { public boolean containsDuplicate(int[] nums) { for (int i = 1; i < nums.length; ++ i) { for (int j = 0; j < i; ++ j) { if (nums[i] == nums[j]) { return true; } } } return false; } } |
class Solution {
public boolean containsDuplicate(int[] nums) {
for (int i = 1; i < nums.length; ++ i) {
for (int j = 0; j < i; ++ j) {
if (nums[i] == nums[j]) {
return true;
}
}
}
return false;
}
} C++:
1 2 3 4 5 6 7 8 9 10 11 12 13 | class Solution { public: bool containsDuplicate(vector<int>& nums) { for (int i = 1; i < nums.size(); ++ i) { for (int j = 0; j < i; ++ j) { if (nums[i] == nums[j]) { return true; } } } return false; } }; |
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
for (int i = 1; i < nums.size(); ++ i) {
for (int j = 0; j < i; ++ j) {
if (nums[i] == nums[j]) {
return true;
}
}
}
return false;
}
};Javascript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | /** * @param {number[]} nums * @return {boolean} */ var containsDuplicate = function(nums) { for (let i = 0; i < nums.length; ++ i) { for (let j = 0; j < i; ++ j) { if (nums[i] == nums[j]) { return true; } } } return false; }; |
/**
* @param {number[]} nums
* @return {boolean}
*/
var containsDuplicate = function(nums) {
for (let i = 0; i < nums.length; ++ i) {
for (let j = 0; j < i; ++ j) {
if (nums[i] == nums[j]) {
return true;
}
}
}
return false;
};Check If Array Contains Duplicate After Sorting
If we sort the array (which will require O(N LogN)), then we can do a linear scan to check the two consecutive elements to find out if there are duplicates. The overall time complexity is improved to O(N LogN) and we are still using the O(1) constant space.
Python:
1 2 3 4 5 6 7 | class Solution: def containsDuplicate(self, nums: List[int]) -> bool: nums.sort() for i in range(1, len(nums)): if nums[i] == nums[i - 1]: return True return False |
class Solution:
def containsDuplicate(self, nums: List[int]) -> bool:
nums.sort()
for i in range(1, len(nums)):
if nums[i] == nums[i - 1]:
return True
return FalseJava:
1 2 3 4 5 6 7 8 9 10 11 | class Solution { public boolean containsDuplicate(int[] nums) { Arrays.sort(nums); for (int i = 1; i < nums.length; ++ i) { if (nums[i] == nums[i - 1]) { return true; } } return false; } } |
class Solution {
public boolean containsDuplicate(int[] nums) {
Arrays.sort(nums);
for (int i = 1; i < nums.length; ++ i) {
if (nums[i] == nums[i - 1]) {
return true;
}
}
return false;
}
} C++:
1 2 3 4 5 6 7 8 9 10 11 12 | class Solution { public: bool containsDuplicate(vector<int>& nums) { sort(begin(nums), end(nums)); for (int i = 1; i < nums.size(); ++ i) { if (nums[i] == nums[i - 1]) { return true; } } return false; } }; |
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
sort(begin(nums), end(nums));
for (int i = 1; i < nums.size(); ++ i) {
if (nums[i] == nums[i - 1]) {
return true;
}
}
return false;
}
};Javascript:
1 2 3 4 5 6 7 8 9 10 11 12 13 | /** * @param {number[]} nums * @return {boolean} */ var containsDuplicate = function(nums) { nums.sort(); for (let i = 1; i < nums.length; ++ i) { if (nums[i] == nums[i - 1]) { return true; } } return false; }; |
/**
* @param {number[]} nums
* @return {boolean}
*/
var containsDuplicate = function(nums) {
nums.sort();
for (let i = 1; i < nums.length; ++ i) {
if (nums[i] == nums[i - 1]) {
return true;
}
}
return false;
};Use Hash Set to Check the Duplicates
Further optimisation can be done via using a Hash Set. The complexity will be O(N) as we only need to conduct a linear scan. However, the space requirement is O(N) as we are using a Hash Set that complexity grows linear with the data set.
Python:
1 2 3 4 5 6 7 8 | class Solution: def containsDuplicate(self, nums: List[int]) -> bool: data = set() for i in nums: if i in data: return True data.add(i) return False |
class Solution:
def containsDuplicate(self, nums: List[int]) -> bool:
data = set()
for i in nums:
if i in data:
return True
data.add(i)
return FalseJava:
1 2 3 4 5 6 7 8 9 10 11 12 | class Solution { public boolean containsDuplicate(int[] nums) { Set<Integer> set = new HashSet<>(); for (Integer x: nums) { if (set.contains(x)) { return true; } set.add(x); } return false; } } |
class Solution {
public boolean containsDuplicate(int[] nums) {
Set<Integer> set = new HashSet<>();
for (Integer x: nums) {
if (set.contains(x)) {
return true;
}
set.add(x);
}
return false;
}
}C++:
1 2 3 4 5 6 7 8 9 10 11 12 13 | class Solution { public: bool containsDuplicate(vector<int>& nums) { unordered_set<int> cache; for (int i = 0; i < nums.size(); i ++) { if (cache.count(nums[i])) { return true; } cache.insert(nums[i]); } return false; } }; |
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
unordered_set<int> cache;
for (int i = 0; i < nums.size(); i ++) {
if (cache.count(nums[i])) {
return true;
}
cache.insert(nums[i]);
}
return false;
}
};Javascript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | /** * @param {number[]} nums * @return {boolean} */ var containsDuplicate = function(nums) { let data = new Set(); for (let x of nums) { if (data.has(x)) { return true; } data.add(x); } return false; }; |
/**
* @param {number[]} nums
* @return {boolean}
*/
var containsDuplicate = function(nums) {
let data = new Set();
for (let x of nums) {
if (data.has(x)) {
return true;
}
data.add(x);
}
return false;
};This problem is the foundamental (basics) for Computer Science Interviews. In this post, we have listed 3 solutions that are implemented in four languages: C++, Java, Python and Javascript.
–EOF (The Ultimate Computing & Technology Blog) —
推荐阅读:食品科学博客解读网络盛传营养误区 中国运动营养食品标准 有规矩才成方圆 健康瘦身:食物搭配让减肥与营养兼顾 保健养生:秋季的健康饮食的营养原则 进口食品营养标签必须符合国家规定 如何读懂包装食品营养标签核心信息 食用油的选择:解密食用油养生之道 对牙齿的健康非常有益的几种食物 常吃这些食物可让你拥有健康的牙齿 转基因食品安全立法的不足和完善建议
- 评论列表
-
- 添加评论