LeetCode35. 搜索插入位置
搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
示例 1:
输入: nums = [1,3,5,6], target = 5 输出: 2
示例 2:
输入: nums = [1,3,5,6], target = 2 输出: 1
解题思路
题目要求使用 O(log n) 的算法,明显使用二分查找。这题是一道简单的题目,需要注意,如果target大于数组的最后一个数,则直接插入到后面,然后使用二分查找,如果没有找到,则可以直接返回high+1
Java代码
class Solution {
public int searchInsert(int[] nums, int target) {
int high = nums.length-1;
int low = 0;
if (target > nums[high]){
return nums.length;
}
while (low <= high){
int mid = (low+high)/2;
if (target == nums[mid]){
return mid;
}else if (target > nums[mid]){
low = mid + 1;
}else {
high = mid - 1;
}
}
return high+1;
}
}
Python代码
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
high = len(nums) - 1
low = 0
if target > nums[high]:
return len(nums)
while low <= high:
mid = int((high+low) / 2)
if target == nums[mid]:
return mid
elif target > nums[mid]:
low = mid + 1
else:
high = mid - 1
return high+1