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|anda < 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.length1 <= arr.length <= 104arris sorted in ascending order.-104 <= arr[i], x <= 104
思路:
建一个队列,长度限制为k, 将arr里的数往队列里放, 队列不满k的时候, 直接放进去就好, 长度达到k后,当前的数字n和arr[0]来进行比较, 因为arr是升序所以arr[0]一定是队列里最小的,而n只有满足abs(n-x) < abs(arr[0]-x)的情况时n才是比arr[0]更好的选择,可以入列,然后把arr[0]踢出队列。
代码(Rust):
impl Solution {
pub fn find_closest_elements(arr: Vec<i32>, k: i32, x: i32) -> Vec<i32> {
let mut queue = Vec::new();
for n in arr {
if queue.len() < k as usize {
queue.push(n);
} else {
if (queue[0] - x).abs() > (n - x).abs() {
queue.remove(0);
queue.push(n);
}
}
}
queue
}
}
这篇博客介绍了如何利用优先队列在有序整数数组中找到给定数值x的k个最接近的元素。算法思路是建立一个大小为k的队列,当队列未满时直接插入元素,当队列满时,比较新元素与队首元素与x的绝对差值,根据条件更新队列。最后返回队列内容作为结果。示例代码展示了在Rust语言中实现这一算法的过程。
1580

被折叠的 条评论
为什么被折叠?



