Сортируйте список и используйте бинарный поиск, чтобы найти искомый элемент, а затем сравните ваших левых и правых соседей.Вы можете использовать массив с доступом O (1).
Что-то вроде:
int nearest(int[] list, int element) {
sort(list);
int idx = binarySearch(element, list);
// make sure you are accessing elements that exist
min = (element - list[idx-1] <= list[idx+1] - element) ? idx-1 : idx+1;
return list[min];
}
Это O (n log n), которое будет амортизироваться, если вы собираетесь выполнитьмногие смотрят взлеты.
РЕДАКТИРОВАТЬ: Для этого вам придется переместить сортировку из этого метода