Closest Number in Sorted Array

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

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

Example

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

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

Given[1, 4, 6]and target =5, return1or2.

Given[1, 3, 3, 4]and target =2, return0or1or2.

分析:

主要注意一下最后选择start还是end的事就行

class Solution:
    # @param {int[]} A an integer array sorted in ascending order
    # @param {int} target an integer
    # @return {int} an integer
    def closestNumber(self, A, target):
        # Write your code here
        if len(A)==0:
            return -1
        start = 0
        end = len(A)-1
        while start+1 < end:
            mid= (start+end)/2
            if target>A[mid]:
                start = mid
            else:
                end=mid
        if target<=A[start]:
            return start
        elif target >= A[end]:
            return end
        else:
            if target-A[start] >=A[end]-target:
                return end
            else:
                return start

Last updated

Was this helpful?