Search Insert Position leetcode java

愛做飯的小瑩子發表於2014-07-21

Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.

You may assume no duplicates in the array.

Here are few examples.
        [1,3,5,6], 5 → 2
        [1,3,5,6], 2 → 1
        [1,3,5,6], 7 → 4
        [1,3,5,6], 0 → 0

 

本題是基本考察二分查詢的題目,與基本二分查詢方法不同的地方是,二分查詢法當查詢的target不在list中存在時返回-1,而本題則需要返回該target應在此list中插入的位置。

 

當迴圈結束時,如果沒有找到target,那麼low一定停target應該插入的位置上,high一定停在恰好比target小的index上。

[1,3,5,6], 7

low = 0, high = 3

step1: mid = 1

          A[mid] = 3, 3<7

          low = mid + 1 = 2

 

low = 2, high = 3

step2: mid = 2

          A[mid] = 5, 5<7

         low = mid + 1 = 3

 

low = 3, high = 3

step3: mid = 3

          A[mid] = 6, 6<7

          low = mid + 1 = 4


low = 4, high = 3

return low = 4;

 

 [1,3,5,6], 0

low = 0, high = 3

step1: mid = 1

          A[mid] = 3, 3>0

          high = mid - 1 = 0

 

low = 0, high = 0

step2: mid = 0

          A[mid] = 1, 1>0

          high = mid - 1 = -1

 

low = 0, high = -1

return 0

 

 1     public int searchInsert(int[] A, int target) {
 2         if(A == null||A.length == 0)
 3             return 0;
 4         int low = 0, high = A.length-1;
 5         
 6         while(low <= high){
 7             int mid = (low + high) / 2;
 8             
 9             if(A[mid] > target)
10                 high = mid - 1;
11             else if(A[mid] < target)
12                 low = mid + 1;
13             else
14                 return mid;
15         }
16         
17         return low;
18     }

 

自己在做第二遍時候犯二,mid = (low+high)/2的括號忘記加了

 

Reference: http://blog.csdn.net/linhuanmars/article/details/31354941

相關文章