본문 바로가기
LeetCode/Sliding Window

[LeetCode][Kotlin] ⭐️ 658. Find K Closest Elements

by jinwo_o 2024. 11. 9.

658. Find K Closest Elements

Given a sorted integer array arr, two integers k and x, return the k closest integers to x in the array. The result should also be sorted in ascending order.

 

An integer a is closer to x than an integer b if:

  • |a - x| < |b - x|, or
  • |a - x| == |b - x| and a < b
정렬된 정수 배열 arr, 두 정수 k와 x가 주어지면 배열에서 x에 가장 가까운 k개의 정수를 반환합니다. 결과도 오름차순으로 정렬해야 합니다. 

정수 a는 다음의 경우 정수 b보다 x에 더 가깝습니다. 
- |a - x| < |b - x| 또는 
- |a - x| == |b - x|이고 a < b

 

Example 1:

Input: arr = [1,2,3,4,5], k = 4, x = 3

Output: [1,2,3,4]

 

Example 2:

Input: arr = [1,1,2,3,4,5], k = 4, x = -1

Output: [1,1,2,3]

 

Constraints:

  • 1 <= k <= arr.length
  • 1 <= arr.length <= 10^4
  • arr is sorted in ascending order.
  • -10^4 <= arr[i], x <= 10^4

코드

class Solution {
    fun findClosestElements(arr: IntArray, k: Int, x: Int): List<Int> {
        var l = 0
        var r = arr.size - k

        while (l < r) {
            val m = (l + r) / 2
            if (x - arr[m] > arr[m + k] - x) {
                l = m + 1
            } else {
                r = m
            }
        }

        return arr.slice(l..l + k - 1)
    }
}