给定一个整数数组,查找该数组是否包含任何重复项。 如果任何值在数组中至少出现两次,则函数应返回true;如果每个元素都不同,则函数应返回false。
Input: [1,2,3,1]
Output: True
Input: []
Output: False
Input: [1]
Output: False
首先想到搞一个list,如果数不存在list里面就加进去,如果存在就返回True, 可行倒是可行,但是超时了= =因为用好几万的数字做测试
class Solution:
def containsDuplicate(self, nums: List[int]) -> bool:
res=[]
for n in nums:
if n in res:
return True
break
else:
res.append(n)
return False
于是2.0把list做了个排序, 第一个等于第二个就返回True, 没有用len()。每次把上一次运行的数存在临时的_里面,速度很快, 超过了90%+
class Solution2.0:
def containsDuplicate(self, nums: List[int]) -> bool:
nums.sort()
cur=None
for n in nums:
_=cur
cur=n
if n==_:
return True
return False
Java
方法1. 先排序(可以不排序), 建立Map, 如果存在Map中返回true, 终止循环, 否则返回false
class Solution {
public boolean containsDuplicate(int[] nums) {
Arrays.sort(nums);
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int i:nums) {
if (!map.containsKey(i)) {
map.put(i,1);
}else{
return true;
}
}
return false;
}
}
方法2. 先排序, 从第二个数开始遍历, 当当前数和前一个数相同, 则返回true
class Solution {
public boolean containsDuplicate(int[] nums) {
if(nums.length==1) return false;
Arrays.sort(nums);
for(int i=1;i<nums.length;i++){
if(nums[i-1]==nums[i]) return true;
}
return false;
}
}
时间复杂度O(n)