/** * 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 * * Tags: Array, Binary Search */ class SearchInsertPos { public static void main(String[] args) { } /** * Binary search * r = m - 1, l = m + 1 */ public int searchInsert(int[] A, int target) { if (A == null || A.length == 0) return 0; int l = 0; int r = A.length - 1; int m; while (l <= r) { m = l + (r - l) / 2; if (A[m] == target) return m; else if (A[m] > target) r = m - 1; else l = m + 1; } return l; } }