here is the code .....
/*Given a sorted array arr[] and a value X, find the k closest elements to X in arr[].
Examples:
Input: K = 4, X = 35
arr[] = {12, 16, 22, 30, 35, 39, 42,
45, 48, 50, 53, 55, 56}
Output: 30 39 42 45
Note that if the element is present in array, then it should not be in output, only the other closest elements are required.
*/
/*Given a sorted array arr[] and a value X, find the k closest elements to X in arr[].
Examples:
Input: K = 4, X = 35
arr[] = {12, 16, 22, 30, 35, 39, 42,
45, 48, 50, 53, 55, 56}
Output: 30 39 42 45
Note that if the element is present in array, then it should not be in output, only the other closest elements are required.
*/
public class FindKClosestElements {
public static void main(String args[]) {
int[] arr = {
12,
16,
22,
30,
35,
39,
42,
45,
48,
50,
53,
55,
56
};
int element = 100;
int k = 5;
int m;
int n;
int distance1;
int distance2;
// case if element is is larger than even the last element in the array
if (arr[arr.length - 1] < element) {
n = arr.length - 1;
while (k != 0) {
System.out.print(arr[n]);
System.out.print(" ");
k--;
n--;
}
return;
}
for (int i = 0; i < arr.length; i++) {
if (arr[i] >= element) {
m = i - 1;
if (arr[i] == element)
n = i + 1;
else
n = i;
while (m >= 0 && n < arr.length && k != 0) {
distance1 = arr[n] - element;
distance2 = element - arr[m];
if (distance1 <= distance2) {
System.out.print(arr[n]);
System.out.print(" ");
k--;
n++;
} else {
System.out.print(arr[m]);
System.out.print(" ");
k--;
m--;
}
}
if (k != 0) {
if (m > 0)
while (k != 0) {
System.out.print(arr[m]);
System.out.print(" ");
m--;
k--;
} else
while (k != 0) {
System.out.print(arr[n]);
System.out.print(" ");
k--;
n++;
}
}
if (k == 0)
return;
else
continue;
}
}
}
}