这是检查整数数组是否包含重复项的正确方法吗?我想传入一个 int[] nums 而不是 Integer[],但无法让它工作。
public static boolean isUnique(Integer[] nums){
return new HashSet<Integer>(Arrays.asList(nums)).size() == nums.length;
}
您可以执行以下操作:
public static boolean isUnique(int[] nums){
Set<Integer> set = new HashSet<>(nums.length);
for (int a : nums) {
if (!set.add(a))
return false;
}
return true;
}
这比你所拥有的更像是一种短路式的方法,一旦遇到重复就返回。更不用说它可以int[]
按照您的意愿使用。我们正在利用一个事实,即Set#add
返回一个布尔值,指示正在添加的元素是否已经存在于集合中。
无论是Set还是排序在这里都无关紧要,排序更优化,对象更少。
public static boolean isUnique(int[] nums) {
if (nums.length <= 1) {
return true;
}
int[] copy = Arrays.copyOf(nums);
Arrays.sort(copy);
int old = Integer.MAX_VALUE; // With at least 2 elems okay.
for (int num : copy) {
if (num == old) {
return false;
}
old = num;
}
return true;
}
附录正如评论所言,速度较慢,但可以节省内存。