LeetCode(Python)—— 搜索插入位置(简单)

搜索插入位置

概述:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。

输入: nums = [1,3,5,6], target = 5
输出: 2

输入: nums = [1,3,5,6], target = 2
输出: 1

输入: nums = [1,3,5,6], target = 7
输出: 4

方法一:二分查找法

思路:直接套用二分法即可,即不断用二分法逼近查找第一个大于等于 target 的下标 。二分查找只有一个思想,那就是:逐步缩小搜索区间。

一图解百惑,上图!

LeetCode(Python)—— 搜索插入位置(简单)_第1张图片

那么,直接上代码!

# 二分法
class Solution:
    def searchInsert(self, nums: List[int], target: int) -> int:
        n = len(nums)
        left = 0 # 左
        right = n - 1 # 右
        while left <= right:
            mid = (right - left) / 2 + left # 中间
            mid = int(mid)
            if nums[mid] < target:
                left = mid + 1 # 右边从mid+1开始,再次寻找
            else:
                right = mid - 1 # 左边边从mid+1开始,再次寻找
        return left

方法二:暴力循环

思路:很简单,暴力循环,设定各种边界条件。直接上代码!

# if大法
class Solution:
    def searchInsert(self, nums: List[int], target: int) -> int:
        n = len(nums)
        if nums[n - 1] == target: # 最后一位
            return n - 1
        if nums[n - 1] < target: 
            return n
        if nums[0] > target: # 第一位
            return 0
        for i in range(n):
            if nums[i] == target:
                return i
        for i in range(n-1):
            if nums[i] < target < nums[i + 1]:
                return i + 1

总结

什么二分查找,边界if大法,中间给我上for循环干它,又不是不能过!

你可能感兴趣的:(算法,数据结构)