level - medium
[문제 내용]
배열에서 x와 가장 가까운 k개의 숫자를 찾아 반환
[example 1]
Input: arr = [1,2,3,4,5], k = 4, x = 3
Output: [1,2,3,4]
[example 2]
Input: arr = [1,2,3,4,5], k = 4, x = -1
Output: [1,2,3,4]
[해결 방법]
x와의 차이값을 index와 함께 저장한후
차이값에대해 오름차순으로 정렬한 index 를
k개 만큼 뽑아 그 index에 해당하는 값을 다시 오름차순하여 반환하였다.
class Solution {
public List<Integer> findClosestElements(int[] arr, int k, int x) {
// index 와 x의 차이값을 저장
final HashMap<Integer, Integer> closer = new HashMap<>();
for(int i=0; i<arr.length; i++) {
closer.put(i, Math.abs(arr[i] - x));
}
// 차이값을 기준으로 오름차순 정렬
ArrayList<Integer> keySet = new ArrayList<>(closer.keySet());
Collections.sort(keySet, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return closer.get(o1).compareTo(closer.get(o2));
}
});
// k개만큼 뽑은 후 오름차순 정렬
ArrayList<Integer> result = new ArrayList<>();
for(int i=0; i<k; i++) {
result.add(arr[keySet.get(i)]);
}
Collections.sort(result);
return result;
}
}