力扣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中很严格要求首字母大写。