搜索插入位置

news/2023/6/9 19:07:34

Python-搜索插入位置

题目

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

请必须使用时间复杂度为 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

题解

思路

暴力遍历

  1. 如果数组中的值大于或者等于 target,直接 return
  2. 如果全部遍历完证明 target 是最大的数,直接插入末尾

缺点:数值较多时,没有那么高效,因此可以引入二分查找

二分查找

  1. left=0,right=nums.length,取mid为中间值
  2. 如果nums[mid]==target,返回mid值,循环终止
  3. 如果nums[mid]>target,就说明从mid到right之间的值都是“无用的”需要挪动right,而我们能知道的接近的一个无用的值是mid,因此right必须比mid还要小才行,也即是right=mid-1
  4. 同理,left=mid+1
  5. 一直循环,除非找到mid值或者发现target根本不在目标中,也就是已经完全循环了一遍(left>right),这时候的right的值就是最接近target但又大于target的值(可以拿0来举例自己画一遍过程),因此 return right+1

代码

暴力遍历

class Solution:def searchInsert(self, nums: List[int], target: int) -> int:for i in range(len(nums)):if nums[i] >= target:return ireturn len(nums)

二分法

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-4556518.html

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

通过Bmob + Android轻松制作一个APP

本篇来自 ithuangqing 的投稿&#xff0c;分享了如何使用Bmob作为服务器来配合开发出一个Android APP程序&#xff0c;希望大家喜欢&#xff01; ithuangqing 的博客地址&#xff1a; http://blog.csdn.net/sinat_33921105​​​​​​​ 如何轻松搭建一个服务器端&#xff0c…

笔记本计算机内存都多大,你的电脑速度慢吗?笔记本电脑“内存”到底要多大才够用?...

电脑上的“内存”可大可小&#xff0c;却关乎着整体运行的速度。内存小了&#xff0c;在多开一些网页和应用软件以后&#xff0c;就会发现电脑会变得越来越卡&#xff0c;原因就是运行内存资源紧张不够了。随着电脑系统与软件的不断更新迭代&#xff0c;在各方面的功能都越来越…

计算机科学与技术专业 笔记本电脑内存8g,专业讲解:笔记本电脑内存大小和性能说明...

RAM(随机存取存储器)也被称为系统存储器。它是暂时载入当前使用的软件和文件的计算机部分。与访问硬盘驱动器(HDD)或固态驱动器(SSD)等存储设备上的数据相比&#xff0c;它使处理器能够更快地访问数据。HDD和SSD以更持久的方式保存软件和文件&#xff0c;直到用户卸载或删除它们…

笔记本内存和台式机内存的区别

相关知识超链接放在最前面&#xff1a;&#xff08;正在写相关文章补充ing&#xff09; 笔记本CPU和台式机CPU区别&#xff1a; https://blog.csdn.net/azj2019/article/details/105981673 笔记本显卡和台式机显卡区别&#xff1a; https://blog.csdn.net/azj2019/article/deta…

自动驾驶控制算法之车辆横向控制(project)

本文为深蓝学院-自动驾驶控制与规划-第三章作业 目录 1 projection introduction 2 思路提示 2.1 ComputeControlCmd 2.2 ComputeLateralErrors 3 Corer Case 3.1 Low speed operation 3.2 Extra damping on heading 3.3 Steer into constant radius curve 4 ROSLGSV…

论文笔记:COCO-CN for Cross-Lingual Image Tagging, Captioning, and Retrieval

COCO-CN用于跨语言图像标记、标题和检索摘要介绍COCO-CN结构应用结论补充摘要 本文从数据和基线方法两方面对跨语言图像标注和检索做出了贡献。我们提出了一种新的中文句子和标记丰富MS-COCO的数据集coco - cn。为了有效的标注获取&#xff0c;我们开发了一个推荐辅助的集体标…

科研快报|二代加三代扩增子测序探究苏铁植物根部复杂微生物群落组成

背景介绍苏铁俗称铁树&#xff0c;是地球上现存最古老的活化石植物&#xff0c;也是种子植物中最原始的种群。我国是世界上苏铁植物资源最丰富的国家之一&#xff0c;本文对我国的特有种德保苏铁&#xff08;Cycas debaoensis&#xff09;和仙湖苏铁&#xff08;Cycas fairylak…

谷歌开发者机器学习词汇表:纵览机器学习基本词汇与概念

选自Google Developers 机器之心编译 机器之心曾开放过人工智能术语集 &#xff0c;该术语库项目目前收集了人工智能领域 700 多个专业术语&#xff0c;但仍需要与各位读者共同完善与修正。本文编译自谷歌开发者机器学习术语表项目&#xff0c;介绍了该项目所有的术语与基本解…