35.索引插入位置
题目分析:
位置一定会返回,不会有返回负数结果:
大致分为以下四种情况:
- 插入位置在所有元素之前
- 数字就是其中某个数组元素对应下标
- 插入位置在一大一小中间
- 插入位置在所有元素之后,也就是数组最后面
解法一:暴力
暴力解法就是:从头开始遍历,遍历到相等的位置就直接返回位置;如果第一个位置就比目标大,说明就是上面的第一种情况,在0位置插入;如果前一个小后一个大,就插在当前位置;如果比最后一个数还大,就插在末尾!
if(nums[i] >= target) return i;这句代码就直接包括了以上所有情况
public int searchInsert(int[] nums, int target) {
for(int i = 0; i < nums.length; i++){
if(nums[i] >= target){
return i;
}
}
return nums.length;
}
解法二:二分!
首先了解到的就是:二分使用的前提条件是数组已经排好序
public static int forNum(int[] nums,int target){
int L = 0;
int R = nums.length;
while(L <= R){
int mid = (L + R)/2;
if(nums[i] > target){
R = mid - 1;
}else if(nums[i] < target){
L = mid - 1;
}else{
return mid;
}
}
return right + 1;
}
注意:最后一句代码:right + 1;就很重要,各种都解决!