g0601_0700.s0658_find_k_closest_elements.Solution Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java21 Show documentation
Show all versions of leetcode-in-java21 Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
package g0601_0700.s0658_find_k_closest_elements;
// #Medium #Array #Sorting #Binary_Search #Two_Pointers #Heap_Priority_Queue #Binary_Search_II_Day_2
// #2022_03_21_Time_3_ms_(99.20%)_Space_44.1_MB_(88.25%)
import java.util.ArrayList;
import java.util.List;
/**
* 658 - Find K Closest Elements\.
*
* Medium
*
* 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`
*
* **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]
*
* **Constraints:**
*
* * `1 <= k <= arr.length`
* * 1 <= arr.length <= 104
* * `arr` is sorted in **ascending** order.
* * -104 <= arr[i], x <= 104
**/
public class Solution {
public List findClosestElements(int[] arr, int k, int x) {
int left = 0;
int right = arr.length - k;
List answer = new ArrayList<>();
while (left < right) {
int mid = left + (right - left) / 2;
if (x - arr[mid] > arr[mid + k] - x) {
left = mid + 1;
} else {
right = mid;
}
}
for (int i = left; i < left + k; i++) {
answer.add(arr[i]);
}
return answer;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy