力扣题目:
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
输入: nums = [1,3,5,6], target = 2 输出: 1
输入: nums = [1,3,5,6], target = 5 输出: 2
思路:因为题目要求时间复杂度为 O(log n) ,所以很容易想到二分法,其过程为:
(1)首先,从数组的中间元素开始搜索,如果该元素正好是目标元素,则搜索过程结束,否则执行下一步。
(2)如果目标元素大于/小于中间元素,则在数组大于/小于中间元素的那一半区域查找,然后重复步骤(1)的操作。
(3)如果某一步数组为空,则表示找不到目标元素。二分法查找的时间复杂度O(logn)。
class Solution(object):
def searchInsert(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
count=len(nums);
left=0;
right=count-1;
while left<=right:
mid=(left+right)/2;
if nums[mid]==target:
return mid;
elif nums[mid]>target:
right=mid-1;
elif nums[mid]<target:
left=mid+1;
return left;