力扣217 存在重复元素
先放一个暴力双循环超时了的Java代码,有一些需要注意的点
class Solution {
public boolean containsDuplicate(int[] nums) {
int y=0;
int z=0;
if(nums.length==1) return false;
for(y=0;y<nums.length;y++){
int val=nums[y];
for(z=y+1;z<nums.length;z++){
if(val==nums[z]){
return true;
}
}
}
return false;
}
}
第一个是z=y+1,可以避免“我等于我自己”带来的尴尬。第二个是出现error: missing return statement,【大致是你申明了返回类型的方法,没有确保有返回值。比如你在分支判断时,有些分支有返回值,有些分支没有返回值。或则你把返回指令写在了循环内,那么如果这个循环结构一次都不循环,也属于没有返回值】。
下面是使用集合的Java代码
class Solution {
public boolean containsDuplicate(int[] nums) {
Set<Integer> sett = new HashSet<Integer>();
for(int i:nums)
sett.add(i);
return sett.size()<nums.length?true:false;
}
}
还有一种方法,对于这种不看顺序只看大小的数组,可以手动给它排个序,然后就好处理多了
Arrays.sort(nums);
还还有一种方法,用哈希表
class Solution {
public boolean containsDuplicate(int[] nums) {
Set<Integer> sett = new HashSet<Integer>();
for (int x : nums) {
if (!sett.add(x)) {
return true; //哈希表里插不进去新的键值对就返回true
}
}
return false;
}
}
下面是Python代码
class Solution:
def containsDuplicate(self, nums: List[int]) -> bool:
sett = set(nums)
if len(sett) == len(nums):
return False
else:
return True
class Solution:
def containsDuplicate(self, nums: List[int]) -> bool:
dic = {}
if len(nums) == 0:
return False
for i in nums:
if i in dic:
return True # 注意这个顺序
dic[i] = 1
return False
先判断有没有key值重复,再把i设为key,1设为value。否则会报错。
注意True和False在Python中很严格要求首字母大写。
