给定一个排序数组和一个目标值,如果在数组中找到目标值则返回索引。如果没有,返回到它将会被按顺序插入的位置。
你可以假设在数组中无重复元素。
一句话思路:找到第一个大于等于target的数。问题:以为要改模板,不会。
思路真身:不用改模板。模板最后得出的是一个最小的范围了 只有两个数,对这个范围的小线段分情况讨论就行了,容易得一比。感觉对二分的理解更深了一点……
一刷报错:
- 是》,我只写了大于。太蠢了。
- 特殊情况里有数组为空的情况nums == null, 此时数组是空的,插入0
- 必须要有return -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; }}