二分查找
    给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
    你可以假设数组中无重复元素。

    示例 1:
    输入: [1,3,5,6], 5
    输出: 2

    示例 2:
    输入: [1,3,5,6], 2
    输出: 1

    示例 3:
    输入: [1,3,5,6], 7
    输出: 4

    示例 4:
    输入: [1,3,5,6], 0
    输出: 0


    Java代码

    1. public class Solution {
    2. public int searchInsert(int[] nums, int target) {
    3. int len = nums.length;
    4. if (len == 0) {
    5. return 0;
    6. }
    7. // 特判
    8. if (nums[len - 1] < target) {
    9. return len;
    10. }
    11. int left = 0;
    12. int right = len - 1;
    13. while (left < right) {
    14. int mid = left + (right - left) / 2;
    15. // 严格小于 target 的元素一定不是解
    16. if (nums[mid] < target) {
    17. // 下一轮搜索区间是 [mid + 1, right]
    18. left = mid + 1;
    19. } else {
    20. // 下一轮搜索区间是 [left, mid]
    21. right = mid;
    22. }
    23. }
    24. return left;
    25. }
    26. }