35. 搜索插入位置
- 题目-简单难度
- [1. 直接while-loop遍历](#1. 直接while-loop遍历)
- [2. 二分法](#2. 二分法)
题目-简单难度
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 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
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/summary-ranges
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
1. 直接while-loop遍历
python
class Solution(object):
def searchInsert(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
# 设置索引
i = 0
# 遍历列表
while i < len(nums):
# 如果发现
if nums[i] >= target:
return i
i+=1
return len(nums)
2. 二分法
python
class Solution(object):
def searchInsert(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
# 设置左右指针
l,r = 0, len(nums)-1
# 当左右指针间仍然有元素未遍历
while l <= r:
# 设置中间元素位置
m = l + (r-l)//2
# 判断中间元素是否比要找到元素大
# 大或者相等的情况 设置右侧边界为m-1
if nums[m] >= target:
r = m - 1
# 小于的情况 设置左侧边界为m+1
else:
l = m + 1
# 返回左指针元素
return l