leetcode学习笔记(35. 搜索插入位置)

116 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

本题考察数列相关知识,为简单题35. 搜索插入位置

35. 搜索插入位置

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

请必须使用时间复杂度为 O(log n) 的算法。

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

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

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

提示:
1 <= nums.length <= 104
-104 <= nums[i] <= 104
nums 为 无重复元素 的 升序 排列数组
-104 <= target <= 104

代码

class Solution:
    def searchInsert(self, nums: List[int], target: int) -> int:
        j = 0
        for i in range(len(nums)):
            if nums[i] == target:
                j = i
            elif nums[i] < target:
                j = i+1
        return j 
二分法

更快

class Solution:
    def searchInsert(self, nums: List[int], target: int) -> int:
        n = len(nums)
        left = 0
        right = n 
        while left < right:
            mid = int((right + left)/2)
            if nums[mid] < target:
                left = mid +1
            else:
                right = mid
        return left

解析

按照我的思路,最简单的方法就是for循环了,因为是排好序的数组,可以直接for循环比较大小,直到找到小于或等于它的值,输出这个target应该在的位置即可
因为数组是排好序的所以用二分法会更快啊
具体方法: 1.定义两个指针,left和right,left指向0,right指向n
2.使用while循环
3.找到数组此时left和right中间的位置mid,如果此位置的数小于target则left=mid+1否则right=mid直到结束while循环
4.此时left等于right,并且等于要插入的位置
5.输出left或者right即可

使用二分法解题的时候有一个要注意的点,就是while循环的结束条件和每次right和left更新的时候是否在mid的基础上加减1

来源:力扣(LeetCode)
链接:leetcode.cn/problems/se…