代码随想录:二分查找相关题目推荐(35、34)

35.搜索插入位置

题目

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

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

代码(暴力遍历)

class Solution {public int searchInsert(int[] nums, int target) {for(int i = 0; i < nums.length; i++){if(nums[i] >= target){return i;  //在数组最前面or直接找到or在某个数后面插入}}return nums.length;  //target最大,插入数组后面}
}

代码(二分查找标准版)

class Solution {public int searchInsert(int[] nums, int target) {int left = 0;int right = nums.length - 1;int mid;while(left <= right){mid = left + (right - left)/2;if(target < nums[mid]){right = mid - 1;}else if(target > nums[mid]){left = mid + 1;}else{return mid;}}return right + 1;  //right指向待插入元素的前一个索引位置}
}

代码(二分查找自己写的)

class Solution {public int searchInsert(int[] nums, int target) {int left = 0;int right = nums.length - 1;int mid;int index = -1;  //返回结果,必须要初始化,-1可以改成别的数while(left <= right){//特殊情况1:target在最前面插入if(target < nums[left]){index = left;  //插在最小值left位置break;}//特殊情况2:target在最后面插入if(target > nums[right]){index = right + 1;  //插在最大值right后面位置,不要忘+1break;}//二分查找逻辑mid = left + (right - left) / 2;if(target < nums[mid]){right = mid - 1;}else if(target > nums[mid]){left = mid + 1;}else{index = mid;  //找到了查找元素break;}}return index;}
}

34.在排序数组中查找元素的第一个位置和最后一个位置

题目

给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。

如果数组中不存在目标值 target,返回 [-1, -1]

你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。

示例 1:

输入:nums = [5,7,7,8,8,10], target = 8
输出:[3,4]

示例 2:

输入:nums = [5,7,7,8,8,10], target = 6
输出:[-1,-1]

示例 3:

输入:nums = [], target = 0
输出:[-1,-1]

代码(两个二分查找)

class Solution {public int[] searchRange(int[] nums, int target) {int start = getleft(nums,target);int end = getright(nums,target);//target在数组的最前面和最后面if(start == -2 || end == -2){return new int[]{-1,-1};}//有target这个数,长度大于1,返回找到的区间if(end - start > 1){return new int[]{start+1,end-1};}//target在数组区间内,但找不到,长度小于等于1else{return new int[]{-1,-1};}}public int getleft(int[] nums,int target){int left = 0;int right = nums.length - 1;int mid;int start = -2; //左边界while(left <= right){mid = left + (right - left) / 2;if(target > nums[mid]){left = mid + 1;}else if(target <= nums[mid]){right = mid -1;start = right;}}return start;}public int getright(int[] nums,int target){int left = 0;int right = nums.length - 1;int mid;int end = -2; //右边界while(left <= right){mid = left + (right - left) / 2;if(target < nums[mid]){right = mid - 1;}else if(target >= nums[mid]){left = mid + 1;end = left;}}return end;}
}

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

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

相关文章

java项目跑不起来 端口已被使用

背景 Springboot项目跑不起来&#xff0c;原因端口被占用。 解决方法 在 Windows 环境下&#xff0c;你可以按照以下步骤来查看某个端口被占用的情况&#xff0c;并停止相应的进程&#xff1a; 查看所有端口占用情况&#xff1a; 按下 Win R 键&#xff0c;打开运行窗口。…

Python调用讯飞星火大模型v3.5接口

在国外&#xff0c;ChatGPT已经成为AI模型行业的大佬&#xff0c;但是国内如果需要使用&#xff0c;会有各种限制&#xff0c;本文介绍如何使用国内的模型。 在国内&#xff0c;讯飞星火大模型是一个非常优秀的中文预训练模型。本文将介绍如何使用Python调用讯飞星火大模型接口…

优思学院|六西格玛中的普氏矩阵(Pugh Matrix)是什么?

决策矩阵&#xff08;Pugh Matrix&#xff09;&#xff0c;也可称作普氏矩阵&#xff0c;它是由设计工程师斯图尔特普发展并得名。这是一个基于标准的矩阵&#xff0c;用于帮助团队从几个备选方案中定量确定给定问题的“最佳”解决方案。普矩阵通常用于产品设计&#xff0c;但实…

java spring 09 Bean的销毁过程 上 在docreatebean中登记要销毁的bean

1.Bean销毁是发送在Spring容器关闭过程中的 AnnotationConfigApplicationContext context new AnnotationConfigApplicationContext(AppConfig.class);UserService userService (UserService) context.getBean("userService");userService.test();// 容器关闭cont…

使用STM32CubeMX进行STM32F4的定时器配置

目录 1. Pin脚2. 配置2.1 时钟配置2.2 RCC配置2.3 Timer配置2.4 输出文件 3. 代码3.1 使能定时器3.2 回调函数 1. Pin脚 2. 配置 2.1 时钟配置 timer3时钟挂载在APB1上&#xff1a; 时钟配置如下&#xff1a; 外部使用8MHz晶振 开启内部16MHz晶振 使用锁相环 开启最高100MHz。…

selenium 同样的class如何选择第二个

借鉴与&#xff1a;https://ask.csdn.net/questions/8081814 直接上代码 List<WebElement> elementsByCssSelector driver.findElementsByCssSelector(".el-input__inner");int size elementsByCssSelector.size();elementsByCssSelector.get(0).sendKeys(&…

React18+TS+NestJS+GraphQL 全栈开发在线教育平台

高质量平台级应用流行全栈技术实用职场技巧通用面试策略React18TSNestJSGraphQL 全栈开发在线教育平台&#xff08;完结&#xff09; 黑石老师&#xff0c;大厂技术专家&#xff0c;深耕前后端十多年。发现很多的前端同学都面临如下的职业困扰&#xff1a;没有能拿的出手的面试…

HTML批量文件上传2——进度条显示

作者&#xff1a;私语茶馆 非常多的云应用中需要上传文本&#xff0c;包括图片&#xff0c;文件等等&#xff0c;这些批量文件上传&#xff0c;往往涉及到进度条显示&#xff0c;多文件上传等&#xff0c;这里分享一个非常好的案例&#xff0c;来自BootStrapfriendly.com&#…

『MySQL 实战 45 讲』20 - 幻读是什么,幻读有什么问题?

幻读是什么&#xff0c;幻读有什么问题&#xff1f; 需求&#xff1a;创建一个小表 CREATE TABLE t (id int(11) NOT NULL,c int(11) DEFAULT NULL,d int(11) DEFAULT NULL,PRIMARY KEY (id),KEY c (c) ) ENGINEInnoDB;insert into t values(0,0,0),(5,5,5), (10,10,10),(15,…

开放原子龙蜥社区 2 大学习赛首批获奖者名单公布

近日&#xff0c;开放原子开源基金会联合龙蜥社区推出「人人都可以参与开源」和「基于 ECS Intel 实例部署 GPT-2 大语言模型」两大学习赛&#xff0c;此赛题长期有效&#xff0c;且有开放原子开源基金会和龙蜥社区共同提供的丰厚双重奖励机制。赛题一经发布&#xff0c;吸引了…

电脑内存不足怎么清理?教你3招轻松解决

电脑内存不足是影响电脑性能的常见问题之一&#xff0c;它会导致电脑运行缓慢、应用程序响应迟钝等情况。为了解决这个问题&#xff0c;需要对电脑内存进行清理和优化。本文将介绍电脑内存不足怎么清理的三种方法&#xff0c;帮助您提高电脑性能。 方法1&#xff1a;清理临时文…

高压开关柜局部放电监测装置APD

安科瑞薛瑶瑶18701709087/17343930412 APD系列高压柜局部放电监测装置通过检测伴随局部放电而产生的电磁波辐射&#xff0c;实时监测的开关柜内局部放电的放电次数和放电频次等数据&#xff0c;对电气设备绝缘状况进行评估&#xff0c;发现设备潜伏性故障&#xff0c;最终实现…

RUST 编程语言使构建更安全的软件变得更加容易。RUST ALL THE THINGS 需要什么?

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

【Axure视频教程】元件交互样式

今天教大家在Axure如何使用元件交互样式&#xff0c;包括鼠标移入样式、鼠标按下样式、选中样式、禁用样式、错误样式、光标样式&#xff0c;通过该教程可以学习各种样式是怎样设置的&#xff0c;以及如何通过交互来控制元件的样式&#xff0c;以及在多个样式之间的优先级。该教…

Java初识继承

继承 文章目录 继承为什么需要继承继承中变量的访问特点继承中方法的访问特点继承的优缺点 概念:在Java中&#xff0c;继承是面向对象编程的一个基本特性。它允许我们定义一个新类&#xff0c;它从另一个已经存在的类继承其属性和方法。被继承的类称为父类或超类&#xff0c;新…

彻底理解 async 和 defer 属性的作用及应用场景

彻底理解 async 和 defer 属性的作用及应用场景 默认HTML 中 script 标签的属性和加载顺序script 标签增加 async 属性后script 标签增加 defer 属性后async 和 defer 属性应用场景对比 默认HTML 中 script 标签的属性和加载顺序 script 标签默认是阻塞加载的&#xff0c;也就…

掌握Ansible命令——提高自动化运维效率

目录 一、Ansible命令 1.定义 2.组成 3.命令格式 4.选项 5.示例 二、常用命令解释 1.ansible-doc 2.ansible-galaxy 3.ansible-playbook 4.ansible-pull 5.ansible-vault 三、高频使用的命令 1.Ping主机 2.执行命令 3.安装软件包 4.管理文件 5.管理服务 6.获…

List的两种实现

前置知识&#xff1a; 数组 baseAddress&#xff1a;数组的首地址 dataTypeSize&#xff1a;数组中元素类型的大小&#xff0c;如int为4字节 为什么数组索引从0开始&#xff0c;假如从1开始不行吗&#xff1f; 在根据数组索引获取元素的时候&#xff0c;会用索引和寻址公式来计…

Spring Cloud 版本简介

SpringCloud发布版本约定 WIKI&#xff1a;发布火车命名约定 spring-cloud/spring-cloud-release 维基 GitHub上 在2020年之前&#xff0c;使用Release Train命名风格&#xff1a; Spring Cloud的Release Train版本号规则&#xff1a;v{伦敦地铁站的英文单词}{SR/M/RC}{数字…

JAVA随记——集合篇

注意&#xff1a;作者之前的Java基础没有打牢&#xff0c;有一些知识点没有记住&#xff0c;所以在学习中出现了许多零散的问题。现在特地写一篇笔记总结一下&#xff0c;所以有些知识点不是很齐全。 集合中各类名词的关系 Collection集合为单列集合。 集合存储数据类型的特点…