给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 1:
输入: [1,3,5,6], 5
输出: 2
示例 2:
输入: [1,3,5,6], 2
输出: 1
示例 3:
输入: [1,3,5,6], 7
输出: 4
示例 4:
输入: [1,3,5,6], 0
输出: 0
思路:
搜索插入值,与查找指定数字类似,所以用二分法查找
另外,插入值下标是大于或等于查找值的,所以一定要默认index为size,并且在target小于等于nums[mid]时 给index赋值
class Solution {
public int searchInsert(int[] nums, int target) {
int size = nums.length;
int l = 0;
int r = size-1;
int index = size;
while(l<=r){
int mid = (l+r) >> 1;
if(target <= nums[mid]){
r = mid -1;
index=mid;
} else{
l = mid +1;
}
}
return index;
}
}
复杂度分析
时间复杂度:O(log n)O(logn),其中 nn 为数组的长度。二分查找所需的时间复杂度为 O(log n)O(logn)。
空间复杂度:O(1)O(1)。我们只需要常数空间存放若干变量。
偷学至 力扣(LeetCode)
网友评论