intleft=0, right = arr.length - 1, mid = 0, flag = 0, flag_1 = 0, arr_size = arr.length - 1; List<Integer> result = newArrayList<>();
while (left <= right) { mid = left + (right - left) / 2; if (arr[mid] > x) { right = mid - 1; } elseif (arr[mid] == x) { break; } else { left = mid + 1; } }
right = mid - k / 2; if (right < 0) { flag = 1; right = 0; } if ((right + k) > arr_size) { flag = 1; right = arr_size - k + 1; if (Math.abs(arr[right] - x) <= Math.abs(arr[right + k -1] - x)) { right--; }
}
while (flag == 0) { if (right < 0 || (right + k) > arr_size || flag_1 > 1 || Math.abs(arr[right] - x) == Math.abs(arr[right + k -1] - x)) { break; } flag_1 = 0; if (Math.abs(arr[right] - x) > Math.abs(arr[right + k -1] - x)) { flag_1++; right++; } if (Math.abs(arr[right] - x) < Math.abs(arr[right + k -1] - x)) { flag_1++; right--; } }
while (true) { if (right <= 0) { break; } if (arr[right] != arr[--right]) { right++; break; } }
if (right < 0) right = 0;
for (inti=0; i < k; i++) { result.add(arr[right + i]); }