1. 原始题目

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

你可以假设数组中无重复元素。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

示例 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

2. 思路

还是考二分法。对于没有重复元素的排序序列,二分法如果找到该元素则返回。找不到的话,high指针会和low交错。即high+1=low。此时的high+1或low-1都将会返回该元素应该插入的位置。

 

3. 解题

 1 class Solution:  2     def searchInsert(self, nums: List[int], target: int) -> int:  3         if not nums:return 0  4         if nums[0]>target: return 0  5         if nums[-1]<target: return len(nums)  6         
 7         low, high = 0, len(nums)-1         # 纯二分法
 8         while(low<=high):  9             mid = int((low+high)/2) 10             if nums[mid]==target: return mid 11             elif nums[mid]<target: low=mid+1
12             else: high=mid-1
13         return high+1                            # 返回位置

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄