Closest Number in Sorted Array

Given a target number and an integer array A sorted in ascending order, find the index i in A such that A[i] is closest to the given target.

Return -1 if there is no element in the array.

分析

使用binary Search 找到可以插入 target 的 position, 例如是 i, 那么,从i(包括i)到后面,都是大于等于target的数字
1 如果 i == 0, return i,因为A[i]一定是最接近 target的数字,后面的数字都大于A[i]
2 如果 i > =,那么需要考虑A[i] 和 A[i - 1] 哪个更接近 target,就返回哪一个
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public  class  Solution {
     /**
      * @param A an integer array sorted in ascending order
      * @param target an integer
      * @return an integer
      */
     public  int  closestNumber( int [] A,  int  target) {
         // Write your code here
         if (A ==  null  || A.length ==  0 )
             return  - 1 ;
         int  left =  0 , right = A.length -  1 , mid;
         while (left < right){
             mid = left + (right - left) /  2 ;
             if (A[mid] < target){
                 left = mid +  1 ;
             }
             else {
                 right = mid;
             }
         }
         // when left == right, this is the first position that target can be insert
         if (right >  0  && (A[right] - target) > (target - A[right -  1 ]))
             return  right -  1 ;
         else
             return  right;
     }
}




转载于:https://www.cnblogs.com/zhxshseu/p/e215a1d1097b67b1ac7d67e99929f426.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值