Leetcode 搜索插入位置

Leetcode 搜索插入位置

搜索插入位置

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

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

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

解题思路

二分查找
求出最小和最大索引的取整中间值, 判断该索引的value是否等于target, 如果相等返回索引位置
如果value大于target, 则查找的目标在中间索引值左侧, 将现在的最大索引值重置为中间值
如果value小于target, 则查找的目标在中间索引值右侧, 将现在的最小索引值重置为中间值
重新取中间索引值继续比较, 直到找到或找不到退出
则元素应该插入的位置为最后最小索引值+1

Answer

 1#
 2# @lc app=leetcode.cn id=35 lang=python3
 3#
 4# [35] 搜索插入位置
 5#
 6
 7# @lc code=start
 8class Solution:
 9    def searchInsert(self, nums: List[int], target: int) -> int:
10        m = 0
11        n = len(nums)-1
12        while m <= n:
13            k = (m + n) // 2
14            if target == nums[k]:
15                return k
16            elif target > nums[k]:
17                m = k + 1
18            else:
19                n = k - 1
20        return n+1
21# @lc code=end

Accepted

62/62 cases passed (32 ms)
Your runtime beats 97.37 % of python3 submissions
Your memory usage beats 7.14 % of python3 submissions (14.3 MB)