35. Search Insert Position

1. 原始题目

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

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

示例 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                            # 返回位置

 

posted @ 2019-04-20 10:24  三年一梦  阅读(201)  评论(0编辑  收藏  举报