问题
一个数组中除了一个数字外,其他所有的数字都是相等的,找出那个不一样的数字。
例子
Kata.findUniq(new double[]{ 1, 1, 1, 2, 1, 1 }); // => 2
Kata.findUniq(new double[]{ 0, 0, 0.55, 0, 0 }); // => 0.55
我的代码
package codewars;
import java.util.HashSet;
import java.util.Set;
public class UniqNum {
public static double findUniq(double arr[]) {
Set<Double> uniqSet = new HashSet<>();
Set<Double> set = new HashSet<>();
for (double value : arr) {
if (set.contains(value)) {
continue;
}
if (uniqSet.contains(value)) {
set.add(value);
uniqSet.remove(value);
} else {
uniqSet.add(value);
}
}
return uniqSet.iterator().next();
}
public static void main(String[] args) {
System.out.println(UniqNum.findUniq(new double[]{1, 1, 1, 2, 1, 1}));
}
}
别人的代码
package codewars;
import java.util.Arrays;
public class UniqNum {
public static double findUniq(double arr[]) {
Arrays.sort(arr);
return arr[0] == arr[1] ? arr[arr.length-1]:arr[0];
}
public static void main(String[] args) {
System.out.println(UniqNum.findUniq(new double[]{1, 1, 1, 2, 1, 1}));
}
}
分析
我的代码是通过一次遍历筛选出唯一值,别人的代码是先排序后找出唯一值。思路不一样,性能上差不多。就是别人的比较简洁。