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
public class Solution { public int searchInsert(int[] A, int target) { for(int i = 0; i < A.length; i++){ if(A[i] < target) continue; else return i; } return A.length; } }
改进一下,可以用binary search。只要注意一下什么时候该返回什么值就行了,比较简单。
public class Solution { public int searchInsert(int[] A, int target) { return searchInsertBinary(A, 0, A.length - 1, target); } public int searchInsertBinary(int[] array, int low, int high, int target){ int mid = (low + high) / 2; if(array[low] > target) return low; if(array[high] < target) return high + 1; if(array[mid] == target) return mid; else if(array[mid] > target) return searchInsertBinary(array, low, mid, target); else return searchInsertBinary(array, mid + 1, high, target); } }