460 · 在排序数组中找最接近的K个数(二分查找 + 线性扫描)

package com.heu.wsq.leetcode.binarysearch;

/**
 * 460 · 在排序数组中找最接近的K个数
 * @author wsq
 * @date 2021/4/24
 *
 * 描述
 * 给一个目标数 target, 一个非负整数 k, 一个按照升序排列的数组 A。
 * 在A中找与target最接近的k个整数。返回这k个数并按照与target的接近程度从小到大排序,如果接近程度相当,那么小的数排在前面。
 *
 * 1. k是一个非负整数,并且总是小于已排序数组的长度。
 * 2. 给定数组的长度是正整数, 不会超过 10^4
 * 3. 数组中元素的绝对值不会超过 10^4
 * ​​
 * 样例
 * 样例 1:
 *
 * 输入: A = [1, 2, 3], target = 2, k = 3
 * 输出: [2, 1, 3]
 * 样例 2:
 *
 * 输入: A = [1, 4, 6, 8], target = 3, k = 3
 * 输出: [4, 1, 6]
 * 挑战
 *
 * O(logn + k) 的时间复杂度
 */
public class KClosestNumbers {
   

    /**
     * 二分查找的变形体
     * 1.首先通过二分查找找到最接近target对应的索引
     * 2.通过在二分查找到的索引两侧进行扩展搜索到 剩余的 k-1 个元素
     * @param A
     * @param target
     * @param k
     * @return
     */
    public int[] kClosestNumbers(int[] A, int target, int k) {
   
        // write your code here
        if(k == 0){
   
            return new int
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值