35.搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
这道题是二分查找的一个变形
关键字,有序数组、无重复元素,二分查找无疑
注意变的关键点:没查找到,找到插入的位置
要求O(log n),不能使用暴力遍历
实际上看完我上一节的二分查找应该不难回答这个问题
重点还是掌握好区间
解法一
左闭右闭区间
class Solution {
public int searchInsert(int[] nums, int target) {
int left = 0;
int right = nums.length-1;
while(left<=right) {
int mid = (left+right)/2;
if(target==nums[mid]) {
return mid;
} else if(nums[mid]>target) {
right = mid - 1;
} else {
left = mid +1;
}
}
return left;
}
}
最后的left就是要插入的位置
解法二
左闭右开区间
class Solution {
public int searchInsert(int[] nums, int target) {
int left = 0;
int right = nums.length;
while(left<right) {
int mid = (left+right)/2;
if(target==nums[mid]) {
return mid;
} else if(nums[mid]>target) {
right = mid;
} else {
left = mid +1;
}
}
return left;
}
}
一样的道理,left就是比较完要插入的位置
掌握了方法就是这么简单,加油!!!