美文网首页poi word 目录生成
leetcode658+有序数组找出距离数字x最近的k个数字

leetcode658+有序数组找出距离数字x最近的k个数字

作者: 寻Sweet | 来源:发表于2019-12-24 12:44 被阅读0次

在一个非递减数组中,找到距离目标值,最近的数组索引。
如 1 2 3 6 7 8 ,目标值为4
返回 2

思路:
可以理解为 先用二分法找到这个目标值,如果找不到,那么就找它应该插入的顺序,判断插入顺序两边的元素谁和目标值近。

image.png

//中级
public class Solution {
public List<Integer> findClosestElements(List<Integer> arr, int k, int x) {
int n = arr.size();
if (x <= arr.get(0)) {
return arr.subList(0, k);
} else if (arr.get(n - 1) <= x) {
return arr.subList(n - k, n);
} else {
int index = Collections.binarySearch(arr, x);
if (index < 0)
index = -index - 1;
int low = Math.max(0, index - k - 1), high = Math.min(arr.size() - 1, index + k - 1);

        while (high - low > k - 1) {
            if (low < 0 || (x - arr.get(low)) <= (arr.get(high) - x))
                high--;
            else if (high > arr.size() - 1 || (x - arr.get(low)) > (arr.get(high) - x))
                low++;
            else
                System.out.println("unhandled case: " + low + " " + high);
        }
        return arr.subList(low, high + 1);
    }
}

}

//高级
public List<Integer> findClosestElements(List<Integer> arr, int k, int x) {
Collections.sort(arr, (a,b) -> a == b ? a - b : Math.abs(a-x) - Math.abs(b-x));
arr = arr.subList(0, k);
Collections.sort(arr);
return arr;
}

相关文章

  • leetcode658+有序数组找出距离数字x最近的k个数字

    在一个非递减数组中,找到距离目标值,最近的数组索引。如 1 2 3 6 7 8 ,目标值为4返回 2 思路:可以理...

  • 数字排序问题

    Find Kth max number in two sorted list——在两个有序列表里,找出第k大的数字...

  • 最小区间问题

    题目描述:k个有序的数组,找到最小的区间范围使得这k个数组中,每个数组至少有一个数字在这个区间范围内。比如: 数组...

  • lintcode 最大子数组|||

    给定一个整数数组和一个整数 k,找出 k 个不重叠子数组使得它们的和最大。每个子数组的数字在数组中的位置应该是连续...

  • 数组中出现次数超过一半的数字

    时间限制:1秒 空间限制:32768K 题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例...

  • combinationII(leetcode216)

    题目 给定一个表示数量的数字k和一个指定数字n,要求找出所有k个数量数字的和为n的组合,k个数字不能重复,数字是由...

  • 剑指offer_数组中重复的数字

    找出数组中重复的数字 1、题目一:找出数组中重复的数字 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 ...

  • 剑指offer题集

    [3] 数组中重复的数字 题目一:找出数组中重复的数字 Description 在一个长度为n的数组里的所有数字都...

  • 2019-08-04-数组算法

    找出数组中重复的数字 1,题目:长度为n+1的数组中保存这1-n的数字,找出其中任意一个重复的数字,并输出 空间换...

  • 3.数组中重复的数字

    找出数组中任意一个重复的数字! 思路1:把数组排序,从排序后的数组中找出重复的数字。但排序一个长度为n的数组需要O...

网友评论

    本文标题:leetcode658+有序数组找出距离数字x最近的k个数字

    本文链接:https://www.haomeiwen.com/subject/jkoxoctx.html