35. Search Insert Position

给定一个排序数组和一个目标值,如果在数组中找到目标值则返回索引。如果没有,返回到它将会被按顺序插入的位置。

你可以假设在数组中无重复元素。

一句话思路:找到第一个大于等于target的数。问题:以为要改模板,不会。

思路真身:不用改模板。模板最后得出的是一个最小的范围了 只有两个数,对这个范围的小线段分情况讨论就行了,容易得一比。感觉对二分的理解更深了一点……

一刷报错:

  1. 是》,我只写了大于。太蠢了。
  2. 特殊情况里有数组为空的情况nums == null, 此时数组是空的,插入0
  3. 必须要有return -1的特殊情况了

风格上:

  1. while后要加空格阿T T
class Solution {
    public int searchInsert(int[] nums, int target) {
        if (nums == null || nums.length == 0) {
            return 0;
        }
        
        int start;
        int end;
        int mid;
        
        //search for a minimum range
        start = 0;
        end = nums.length - 1;
        while(start + 1 < end) {
            mid = start + (end - start) / 2;
            if (nums[mid] == target) {
                end = mid;
            }
            if (nums[mid] < target) {
                start = mid;
            }
            if (nums[mid] > target) {
                end = mid;
            }
        }
        
        //find the position
        if (nums[start] >= target) {
            return start;
        }
        else if (nums[end] >= target) {
            return end;
        }
        else if (nums[end] < target) {
            return end+1;
        }
        
        return -1;
    }
}
原文地址:https://www.cnblogs.com/immiao0319/p/7881709.html