zoukankan      html  css  js  c++  java
  • [LintCode] 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.

     Notice

    There can be duplicate elements in the array, and we can return any of the indices with same value.

    Example

    Given [1, 2, 3] and target = 2, return 1.

    Given [1, 4, 6] and target = 3, return 1.

    Given [1, 4, 6] and target = 5, return 1 or 2.

    Given [1, 3, 3, 4] and target = 2, return 0 or 1 or 2.

    Challenge 

    O(logn) time complexity.

     1 public class Solution {
     2     /*
     3      * @param A: an integer array sorted in ascending order
     4      * @param target: An integer
     5      * @return: an integer
     6      */
     7     public int closestNumber(int[] A, int target) {
     8         if(A == null || A.length == 0) {
     9             return -1;
    10         }
    11         int low = 0, high = A.length - 1;
    12         while(low + 1 < high) {
    13             int mid = low + (high - low) / 2;
    14             if(A[mid] == target) {
    15                 return mid;
    16             }
    17             //numbers after index mid are >= A[mid] > target, which means they can't be closer to
    18             //the target value than A[mid] is, so we can safely get rid of the bigger half.
    19             else if(A[mid] > target) {
    20                 high = mid;
    21             }
    22             //numbers before index mid are <= A[mid] < target, which means they can't be closer to
    23             //the target value than A[mid] is, so we can safely get rid of the smaller half.
    24             else {
    25                 low = mid;
    26             }
    27         }
    28         if(Math.abs(A[low] - target) <= Math.abs(A[high] - target)) {
    29             return low;
    30         }
    31         return high;
    32     }
    33 }

    Related Problems

    K Closest Numbers in Sorted Array

    Last Position of Target

    Classical Binary Search

    First Position of Target

  • 相关阅读:
    JS client(X,Y)、screen(X,Y)、page(X,Y)的区别
    jS冒泡优化
    CSS盒子模型
    CSS段落对齐方式
    CSS引入方式
    CSS/让一个盒子消失的5中方法
    css垂直居中方法
    【数论】BSGS
    【线段树】树套树 树状数组套主席树
    【树】动态树 LCT
  • 原文地址:https://www.cnblogs.com/lz87/p/7494153.html
Copyright © 2011-2022 走看看