题目描述
往有序数组插入一个值,如果已有则返回它的索引,如果没有则返回应该插入的位置(也是一个索引)。
传送门:35. 搜索插入位置
思路
使用二分查找,如果数组中存在,找到之后,返回mid
。
如果不存在,那结束查询时,左指针、右指针和mid与应该插入的位置有什么关系?
[1,3,5,6]
可以手动模拟
二分查找,可以看到不管是想插入的是7、0、2,我们应该返回的位置的索引都是left
。
代码
class Solution {public int searchInsert(int[] nums, int target) {return binarySearch(nums,target,0,nums.length-1);}public int binarySearch(int[]nums,int target,int left,int right){int mid=0;while(left<=right){mid=(left+right)/2;if(nums[mid]==target)return mid;if(nums[mid]>target)right=mid-1;else left=mid+1;}return left;}
}