leetcode - find k closest elements(java)

silver·2021년 7월 3일

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;
    }
}

0개의 댓글