【leetcode算法-简单】35. 搜索插入位置
2024-08-27 11:24:41
【题目描述】
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 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
【解答】
- 解法一:遍历
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
if target in nums: #如果target存在于nums中
return nums.index(target)
elif target < nums[0]: #如果target比数组第一个元素小
return 0
elif target > nums[-1]: #如果target比数组最后一个元素大
return len(nums)
else:
for i in range(len(nums)-1):
if nums[i] < target and nums[i+1] > target:
return i+1
执行用时:54ms
- 解法二:二分法
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
size=len(nums)
#特判1
if size==0:
return 0
#特判2:如果target大于最后一个元素
if nums[-1]<target:
return size
left=0
right=size-1
#二分法逻辑判断
while left<right:
mid=left+(right-left)//2 #mid=(left+right)//2 但是(left+right)可能会整型溢出,故换一种写法
if nums[mid]<target:
left=mid+1
else:
assert nums[mid] >= target
right=mid
return left
执行用时:86ms
最新文章
- java从基础知识(十)java多线程(下)
- Linux常用命令学习8---(用户和用户组管理)
- paper 123: SVM如何避免过拟合
- IOS 使用FMDB多线程访问数据库 及databaseislocked的问题
- Design Tip #142 Building Bridges
- [笔记]PHP文件系统处理
- linux curl用法详解
- ubuntu KDE/GNOME vnc
- ffmpeg用法
- js-注释代码习惯
- bzoj1193: [HNOI2006]马步距离
- Python开发【前端篇】HTML
- 【转】Python爬虫:抓取新浪新闻数据
- 【SQL实践】其他常用SQL汇总
- 使用Guava获取某一个类的指定超类上的泛型Type T
- Netty 能做什么
- 转:ECharts图表组件入门教程之Theme:ECharts图表的皮肤是什么?如何给图表换主题(皮肤)Theme?
- NodeJS框架express的路径映射(路由)功能及控制
- MySQl资料链接
- docker及服务器遇到的坑