배열을 정렬하는 경우보다 효율적인 방법은 이진 검색을 사용하는 것입니다. 이것은 모든 값을 검사 할 필요가 없으므로 O (n) 요소 대신 O (log n) 시간이 걸립니다.
public static void main(String... args) {
int[] values = {65, 75, 85};
for (int find : new int[]{60, 68, 74, 88}) {
int result = closest(find, values);
System.out.println(find + " => " + result);
}
}
private static int closest(int find, int... values) {
int index = Arrays.binarySearch(values, find);
if (index >= values[0])
return index;
if (index == -1)
return values[0]; // closest
index = -index - 2;
if (index + 1 >= values.length)
return values[values.length - 1]; // closest
final int v0 = values[index];
final int v1 = values[index + 1];
return Math.abs(v0 - find) <= Math.abs(v1 - find) ? v0 : v1;
}
인쇄
60 => 65
68 => 65
74 => 75
88 => 85
타겟 정수 X 인 경우, 단지 어레이의 Y 예컨대 ABS (X-Y)가 최소가되도록를 선택. –