Java小算法实现系列
概述
传入一个目标数组和目标元素,返回数组中与目标元素最接近的元素;
方法一
public static Object getNumberTwo(int[] intarray,int number){
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int object : intarray) {
map.put(Math.abs(number-object), object);
}
Object[] array = map.keySet().toArray();
Arrays.sort(array);
return map.get(array[0]);
}
方法二
public static int getNumberThree(int[] intarray,int number){
int index = Math.abs(number-intarray[0]);
int result = intarray[0];
for (int i : intarray) {
int abs = Math.abs(number-i);
if(abs <= index){
index = abs;
result = i;
}
}
return result;
}
测试代码
int [] test = {150,200,240,250,300};
getNumberTwo(test,0);
getNumberThree(test,0);
性能比较
getNumberThree方法执行时间======207451
getNumberTwo方法执行时间======2011367
结论
方法一中要每次new一个Map。导致空间复杂度为O(n),在性能上不及方法二,如果你有更好的实现,希望交流;