LeetCode题库------35.搜索插入位置(Java)
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
-
难度:简单
示例
- 示例1
输入: nums = [1,3,5,6], target = 5
输出: 2
- 示例2
输入: nums = [1,3,5,6], target = 2
输出: 1
题目分析
在排序数组中,找到是否有target。如果有,返回下标;如果没有,按顺序插入数组中,然后返回下标。
实际上是在找数组中target <= nums[mid]
的值
题解
方法一:
public int searchInsert(int[] nums, int target) {
int min = 0,max = nums.length - 1;
int now = nums.length;
while(min <= max){
int mid = min + (max - min)/2;
if(target > nums[mid]){
min = mid + 1;
}else{
now = mid;
max = mid - 1;
}
}
return now;
}
思路:
考察二分法的使用,如果target > nums[mid]
,首坐标为mid + 1
;如果target <= nums[mid]
,保存现有坐标now = mid
(如果数组不存在目标值且nums[mid] > target
,有可能将target插入此位置),尾坐标为mid - 1
- target有可能比数组中所有值都大,因此给定now初始值应为数组长度