658. Find K Closest Elements

Description

Given a sorted array, two integers k and x, find the k closest elements to x in the array. The result should also be sorted in ascending order. If there is a tie, the smaller elements are always preferred.

Example 1:

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

Example 2:

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

Note:

  1. The value k is positive and will always be smaller than the length of the sorted array.
  2. Length of the given array is positive and will not exceed 104
  3. Absolute value of elements in the array and x will not exceed 104

UPDATE (2017/9/19):
The arr parameter had been changed to an array of integers (instead of a list of integers). Please reload the code definition to get the latest changes.

Solution

Binary search, time O(log n)

I binary-search for where the resulting elements start in the array. It’s the first index i so that arr[i] is better than arr[i+k] (with “better” meaning closer to or equally close to x). Then I just return the k elements starting there.

这思路真心牛逼。。

class Solution {
    public List<Integer> findClosestElements(int[] arr, int k, int x) {
        int left = 0;
        int right = arr.length - k - 1;
        
        while (left <= right) {
            int mid = (left + right) / 2;
            
            if (x - arr[mid] > arr[mid + k] - x) {
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }
        
        int[] closest = Arrays.copyOfRange(arr, left, left + k);
        return IntStream.of(closest).boxed().collect(Collectors.toList());        
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 7,448评论 0 10
  • **2014真题Directions:Read the following text. Choose the be...
    又是夜半惊坐起阅读 9,912评论 0 23
  • 世界与我 从此形同陌路 心禁了 或是最好结局 别再说委屈 别再说痛苦 干了这杯酒 把一切掩埋入土 就这样结束 我知...
    长缨书生阅读 580评论 0 0
  • 夜晚降临,是否有些疲惫,下班后的你,准备去哪里?今晚,你是否忙碌?你准备好七夕的惊喜了吗? 早起的鸟儿有虫吃。哈哈...
    丿未小生阅读 385评论 0 0