【力扣】35.搜索插入位置--Python实现

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

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/search-insert-position

【解题思路】
这道题用二分法解。

  • 首先,如果元素在数组中,则二分法一定可以找到其索引
  • 若元素不在数组中,则通过二分法可以找到其插入的位置:
    -当不满足start < end的条件时,即start=end时,如果nums[start]恰好等于target,则返回start为要求的target值的索引
    -当target值小于nums[start]时,start的前一个位置就是所要插入元素的位置。此时需要注意边界条件的判断,若start=0,则插到第0个位置
    -当target值大于nums[start]时,插到start的后一个位置即可。

用Python实现的代码如下:

class Solution(object):
    def searchInsert(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """
        start, end = 0, len(nums)-1
        while start < end:
            mid = (start+end)/2
            if nums[mid] < target:
                start = mid + 1
            elif nums[mid] > target:
                end = mid - 1
            else:
                return mid
        if target == nums[start]:
            return start
        elif target < nums[start]:
            return max(0, start)
        else:
            return start+1

你可能感兴趣的:(力扣,二分法,leetcode,python,算法,数据结构)