搜索插入位置-java

news2024/11/18 6:26:08
  • 题目描述 :

     
    • 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
    • 请必须使用时间复杂度为 O(log n) 的算法。 
  • 思路分析: 
    • 这段代码的解题思想是利用二分查找的方法在一个有序数组中寻找目标元素的索引或者确定目标元素应该插入的位置。二分查找的核心思想是通过比较目标元素与数组中间位置的元素的大小关系,从而缩小查找范围。在每一步中,根据中间元素与目标元素的大小关系,确定目标元素可能存在的区间,然后不断缩小这个区间范围,直到找到目标元素或确定插入位置为止。
    • 通过不断将查找区间一分为二,每次比较都能将待查找元素所在的区间范围减半,从而快速定位目标元素的位置。这种分治的思想使得二分查找算法的时间复杂度为O(log n),相比线性查找具有更高的效率,特别是在大规模数据集中。因此,二分查找是一种高效的查找算法,适用于有序数组这样的情况。
       
  • 解题步骤:
    • 1.初始化左右指针
      • 初始化 left为0,表示数组的起始位置,right为数组的最后一个位置。

    • 2.循环查找
      • 在 while 循环中,只要 left小于等于 right,就继续查找。

    • 3.计算中间位置
      • 计算中间位置 mid,通过 (left + right) / 2获得。

    • 4.比较目标值
      • 如果 nums[mid]等于目标值 target,则找到目标元素,直接返回mid
      • 如果 nums[mid]小于目标值 target,说明目标值在右侧,更新 left = mid + 1
      • 如果 nums[mid]大于目标值 target,说明目标值在左侧,更新 right = mid - 1
    • 5.返回插入位置
      • 当循环结束时,如果没有找到目标元素,则返回left,表示应该插入的位置。

    • 以下是完整代码: 
      • class Solution {
            public int searchInsert(int[] nums, int target) {
                int left = 0;
                int right = nums.length - 1;
        
                while (left <= right) {
                    int mid = left + (right - left) / 2;
        
                    if (nums[mid] == target) {
                        return mid;
                    } else if (nums[mid] < target) {
                        left = mid + 1;
                    } else {
                        right = mid - 1;
                    }
                }
        
                return left;
            }
        }
        

           

      •  这一期的代码还是比较简单的, 但是可以注意一下小细节, 可以进一步优化代码

        • ​​​​​​​在这个二分查找算法中,当循环结束时,`left`指向的位置就是目标元素应该插入的位置。这是因为在循环中,`left`始终指向小于等于目标元素的位置,而`right`始终指向大于等于目标元素的位置。

          当循环结束时,如果数组中存在目标元素,则会在某个位置`mid`找到它,返回该位置。如果数组中不存在目标元素,`left`将指向第一个大于目标元素的位置,也就是目标元素应该插入的位置。因此,直接返回`left`即可得到正确的插入位置。

          这样的设计确保了无论目标元素是否存在于数组中,都能正确返回目标元素应该插入的位置,以保持数组的有序性。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微服务(基础篇-006-Docker安装-CentOS7)

目录 05-初识Docker-Docker的安装_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1LQ4y127n4?p46&spm_id_frompageDriver&vd_source60a35a11f813c6dff0b76089e5e138cc 0.安装Docker 1.CentOS安装Docker 1.1.卸载&#xff08;可选&#xff09; 1.2.安装dock…

爬虫工作量由小到大的思维转变---<第六十章 Scrapy框架中的信号处理机制(Signals)研究(1)>

前言: Scrapy框架默认的事件驱动设计在某些场景下可能不够灵活或满足定制化需求。因此&#xff0c;深入研究Scrapy框架中的信号处理机制&#xff08;Signals&#xff09;是必要的。 本研究的目的是深入了解Scrapy框架中的信号处理机制&#xff0c;在网络爬虫中的应用和意义。通…

软考高级架构师:ESB 企业服务总线概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

正则表达式 vs. 字符串处理:解析优势与劣势

title: 正则表达式 vs. 字符串处理&#xff1a;解析优势与劣势 date: 2024/3/27 15:58:40 updated: 2024/3/27 15:58:40 tags: 正则起源正则原理模式匹配优劣分析文本处理性能比较编程应用 1. 正则表达式起源与演变 正则表达式&#xff08;Regular Expression&#xff09;最早…

单链表交叉分离,运用头插法,尾插法(算法库应用)

原文博客链接:单链表分离(头插法和尾插法的结合,理解指针变换)_3.对任务1或者2中创建的某一个单链表{a1,b1,a2,b2,...,an,bn},编写一个算法将-CSDN博客 函数实现: /************************************************** 函数名:separate_LinkList 功 能: 把一个链表,交叉新建…

风力发电电网系统的simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1风力发电原理与风机数学模型 4.2 电力电子变换器模型 4.3并网控制策略 5.完整工程文件 1.课题概述 风力发电电网系统的simulink建模与仿真。 2.系统仿真结果 3.核心程序与模型 版本&#xff1a;…

数据通信基础(网络工程师)

数据通信基础 需要掌握的内容&#xff1a; &#xff08;1&#xff09;信道特性。 &#xff08;2&#xff09;调制和编码&#xff0c;包括ASK、FSK、PSK、QPSK、采样定理、PCM、编码。 &#xff08;3&#xff09;传输技术&#xff0c;包括通信方式&#xff08;单工/半双工/全双…

如何备考2025年AMC8竞赛?吃透2000-2024年600道真题(免费送题

最近有家长朋友问我&#xff0c;现在有哪些类似于奥数的比赛可以参加&#xff1f;我的建议可以关注下AMC8的竞赛&#xff0c;类似于国内的奥数&#xff0c;但是其难度要比国内的奥数低一些&#xff0c;而且比赛门槛更低&#xff0c;考试也更方便。比赛的题目尤其是应用题比较有…

CCF-CSP认证考试 202212-3 JPEG 解码 100分题解

更多 CSP 认证考试题目题解可以前往&#xff1a;CSP-CCF 认证考试真题题解 原题链接&#xff1a; 202212-3 JPEG 解码 时间限制&#xff1a; 1.0s 内存限制&#xff1a; 512.0MB 问题背景 四年一度的世界杯即将画上尾声。在本次的世界杯比赛中&#xff0c;视频助理裁判&…

YOLOv8项目实践——目标检测、实例分割、姿态估计、目标追踪算法原理及模型部署(Python实现带界面)

简介 Ultralytics YOLOv8是一种前沿的、最先进的&#xff08;SOTA&#xff09;模型&#xff0c;它在前代YOLO版本的成功基础上进行了进一步的创新&#xff0c;引入了全新的特性和改进&#xff0c;以进一步提升性能和灵活性。作为一个高速、精准且易于操作的设计&#xff0c;YO…

Jenkins常用插件安装及全局配置

Jenkins常用插件安装及全局配置 前言 ​ Jenkins是一个流行的持续集成工具&#xff0c;通过安装适用的插件&#xff0c;可以扩展Jenkins的功能&#xff0c;并与其他工具和系统集成。本文将介绍一些常用的Jenkins插件以及安装和配置的步骤。通过安装和配置这些常用插件&#xf…

windows安全中心设置@WindowsDefender@windows安全中心常用开关

文章目录 abstractwindows defender相关服务&#x1f47a; 停用windows Defender临时关闭实时防护使用软件工具关闭defender control(慎用)dismdControl 其他方法使其他杀毒软件注册表修改 保护历史恢复被认为是有病毒的文件添加信任目录,文件,文件类型或进程 abstract window…

k8s1.28.8版本安装prometheus并持久化数据

本文参考 [k8s安装prometheus并持久化数据_/prometheus-config-reloader:-CSDN博客](https://blog.csdn.net/vic_qxz/article/details/119598466)前置要求: 已经部署了NFS或者其他存储的K8s集群. 这里注意networkpolicies网络策略问题&#xff0c;可以后面删除这个策略&#x…

【性能优化】 【回溯】 【字符串】1307. 口算难题

作者推荐 视频算法专题 本文涉及知识点 数学 回溯 字符串 性能优化 LeetCode1307. 口算难题 给你一个方程&#xff0c;左边用 words 表示&#xff0c;右边用 result 表示。 你需要根据以下规则检查方程是否可解&#xff1a; 每个字符都会被解码成一位数字&#xff08;0 - …

【Postman如何进行接口测试简单详细操作实例】

1、下载Postman postman下载地址&#xff1a;Download Postman | Get Started for Free 2、安装Postman (1)双击下载好的postman-setup.exe文件&#xff0c;进行安装postman工具 (2)安装完成后&#xff0c;在桌面找到并打开postman软件&#xff0c;输入邮箱和密码进行登录&a…

微软正在改进其AI驱动的Copilot在Microsoft Teams中的工作方式,为会议聊天、总结等引入了新的召唤助手方式

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

【学习心得】Jupyter常用操作与魔法方法

一、安装与打开 Jupyter是什么我就不啰嗦了&#xff0c;直接安装&#xff1a; pip install jupyter 安装完后&#xff0c;在你想要打开的项目路径下&#xff0c;唤出CMD执行下面命令就可以使用jupyter notebook了 jupyter notebook 也可以用更加好用的jupyter lab&#xff0…

【CXL协议-RAS(12)】

前言&#xff1a; 在了解本章之前&#xff0c;咱们先来了解一下什么是RAS RAS是可靠性&#xff08;Reliability&#xff09;、可用性&#xff08;Availability&#xff09;和服务性&#xff08;Serviceability&#xff09;的缩写&#xff0c;这是衡量系统设计和架构质量的关键…

STM32启动文件命名方式说明以及启动过程分析

1、启动文件的路径 cl&#xff1a;互联型产品&#xff0c;stm32f105/107系列 vl&#xff1a;超值型产品&#xff0c;stm32f100系列 xl&#xff1a;超高密度产品&#xff0c;stm32f101/103系列 flash容量大小&#xff1a; ld&#xff1a;小容量产品&#xff0c; 小于64KB md…

科普 | Runes 预挖矿概念

作者&#xff1a;Jacky X/推&#xff1a;zxl2102492 关于 Runes 协议的前世今生&#xff0c;可以点击阅读这篇文章 &#x1f447; 《简述 Runes 协议、发展历程及最新的「公开铭刻」发行机制的拓展讨论》 什么是传统预挖矿概念 这轮比特币生态爆发之前&#xff0c;预挖矿&…