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