本文已参与「新人创作礼」活动,一起开启掘金创作之路。
本题考察数列相关知识,为简单题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…