【题目描述】

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

你可以假设数组中无重复元素。

示例 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

最新文章

  1. java从基础知识(十)java多线程(下)
  2. Linux常用命令学习8---(用户和用户组管理)
  3. paper 123: SVM如何避免过拟合
  4. IOS 使用FMDB多线程访问数据库 及databaseislocked的问题
  5. Design Tip #142 Building Bridges
  6. [笔记]PHP文件系统处理
  7. linux curl用法详解
  8. ubuntu KDE/GNOME vnc
  9. ffmpeg用法
  10. js-注释代码习惯
  11. bzoj1193: [HNOI2006]马步距离
  12. Python开发【前端篇】HTML
  13. 【转】Python爬虫:抓取新浪新闻数据
  14. 【SQL实践】其他常用SQL汇总
  15. 使用Guava获取某一个类的指定超类上的泛型Type T
  16. Netty 能做什么
  17. 转:ECharts图表组件入门教程之Theme:ECharts图表的皮肤是什么?如何给图表换主题(皮肤)Theme?
  18. NodeJS框架express的路径映射(路由)功能及控制
  19. MySQl资料链接
  20. docker及服务器遇到的坑

热门文章

  1. tmux-cheatsheet
  2. 小象和老鼠 DP
  3. 3、spark Wordcount
  4. easy-table-vue+VueJs、SpringBoot+Mybatis实现MVVM模型前后台数据交互
  5. Effective Java 3
  6. JDBC的概述和简单使用
  7. linux 关机/重启命令总结
  8. SpringBoot-自动装配对象及源码ImportSelector分析
  9. MySQL 中视图和表的区别以及联系是什么?
  10. 快速安装python3