给定一个数组,要求写出函数判断该数组是否包含重复元素。使用python的话可以简单使用一个字典来实现:
def solution(nums):
l = len(nums)
count = {}
for i in range(0,l):
if nums[i] not in count.keys():
count[nums[i]] = 0
else:
return True
return False
Java中也存在字典不过现在并不常用。相应的,可以使用map接口。使用泛型Map声明一个存储对象m
Map <Integer,Integer> m = new HashMap<Integer,Integer>();
输入Map<int,int>会报错。这是由于使用泛型进行声明时,传入参数必须为一个类,而int为基本类型,此处应该用int的封装类Interger做声明。
应该注意的是在java中不存在“函数”,只有依附于类或对象的“方法”,因此不能把本题中的判断函数定义在mian方法内。
java中的类似功能可以这样实现:
import java.util.*;
public class Entry {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] nums = {1,2,3,4,5,6,7,8,9}; //此处输入数组
System.out.println(containsDuplicate(nums));
}
public static boolean containsDuplicate(int[] nums){
Map <Integer,Integer> m = new HashMap<Integer,Integer>(); //定义泛型m,m用于存储以"integer"为键且以"integer"为值的键值对
int l = nums.length;
for(int i=0;i<l;i++){
if(!m.containsKey(nums[i])){
m.put(nums[i], 1);
continue;
}
else{
return true;
}
}
return false;
}
}
这个方法在leetcode中慢于77%的java解决方案,跑完leetcode中的算例大概需要23ms。另一类极快的方法是将数组进行排序后比较相邻数字是否相同,可以在6ms内完成算例。这个结果与排序算法的效率有关。
这里用到了泛型Map。相比与python里的dict可以使用任何对象作为键或值,Java的Map泛型在声明并传入所限定的类型之后就不会在其方法中接收其它传入类型了。应该是一种比较安全的保护机制。