头歌资源库(19)在排序数组中查找元素的首尾位置

一、 问题描述

 二、算法思想   

       该问题可以通过二分查找的思想来解决。

       首先,我们可以使用二分查找找到目标值在数组中的任意一个位置(即该位置的值等于目标值)。假设找到的位置为mid。

       接下来,我们需要在mid的左边和右边分别找到目标值的开始位置和结束位置。

在mid的左边查找目标值的开始位置: 我们可以继续使用二分查找,在数组的左半部分中查找目标值的开始位置。具体思路如下:

  • 初始化start为0,end为mid。
  • 如果nums[mid]等于target,则将end更新为mid-1,继续在左半部分查找。
  • 如果nums[mid]大于target,则将end更新为mid-1,继续在左半部分查找。
  • 如果nums[mid]小于target,则将start更新为mid+1,继续在左半部分查找。 直到start大于end时,我们找到了目标值在数组中的开始位置。

        在mid的右边查找目标值的结束位置: 我们可以继续使用二分查找,在数组的右半部分中查找目标值的结束位置。具体思路如下:

  • 初始化start为mid,end为数组长度-1。
  • 如果nums[mid]等于target,则将start更新为mid+1,继续在右半部分查找。
  • 如果nums[mid]大于target,则将end更新为mid-1,继续在右半部分查找。
  • 如果nums[mid]小于target,则将start更新为mid+1,继续在右半部分查找。 直到start大于end时,我们找到了目标值在数组中的结束位置。

       最后,如果数组中不存在目标值target,则开始位置和结束位置都为0。

三、代码实现  

#include<stdio.h>
int result[2];
void search(int *nums,int n,int target)
{result[0]=0;result[1]=0;int left=0,mid;int right=n-1;while(left<=right){mid=left+(right-left)/2;if(nums[mid]>target){right=mid-1;}else if(nums[mid]<target){left=mid+1;}else{result[0]=mid+1;right=mid-1;}}left=0;right=n-1;while(left<=right){int mid=left+(right-left)/2;if(nums[mid]>target){right=mid-1;}else if (nums[mid]<target){left=mid+1;}else{result[1]=mid+1;left=mid+1;}}
}int main(){int target,nums[100];int n,i;scanf("%d",&n);scanf("%d",&target);for(i=0;i<n;i++){scanf("%d",&nums[i]);}search(nums,n,target);printf("%-3d",result[0]);printf("%-3d",result[1]);return 0;}

执行结果  

 结语   

你要安静的优秀

还有悄无声息的坚强

!!!

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

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

相关文章

UNIAPP_顶部导航栏右侧添加uni-icons图标,并绑定点击事件,自定义导航栏右侧图标

效果 1、导入插件 uni-icons插件&#xff1a;https://ext.dcloud.net.cn/plugin?nameuni-icons 复制 uniicons.ttf 文件到 static/fonts/ 下 仅需要那个uniicons.ttf文件&#xff0c;不引入插件、单独把那个文件下载到本地也是可以的 2、配置页面 "app-plus":…

Python爬虫+数据分析+数据可视化图形-爬取高校排名数据

①本文主要使用python 爬取了中国大学排名前30的大学信息&#xff0c;并进行了数据处理及分析&#xff0c;是一个比较经典的python爬虫和分析项目 ②主要内容:爬虫数据预处理数据可视化分析 完整代码请看这里拿&#x1f447;↓↓↓

Flutter本地数据持久化的几种方式

目录 前言 一、shared_preferences 1.添加依赖 2.保存数据 3.读取数据 4.移除数据 5.Shared_preferences的优缺点 6.完整的示例代码 二、path_provider 1.导入path_provider 2.创建文件读写的目录 3.向文件中写入数据 4.从文件中读取数据 5.完整的示例代码 三、…

Mac本地部署大模型-单机运行

前些天在一台linux服务器&#xff08;8核&#xff0c;32G内存&#xff0c;无显卡&#xff09;使用ollama运行阿里通义千问Qwen1.5和Qwen2.0低参数版本大模型&#xff0c;Qwen2-1.5B可以运行&#xff0c;但是推理速度有些慢。 一直还没有尝试在macbook上运行测试大模型&#xf…

我这个经验好找嵌入式的工作吗?

大家好&#xff0c;我是麦鸽。最近网友的提问&#xff0c;这样的经验&#xff0c;好找嵌入式的工作吗&#xff1f; 下面是网友的情况&#xff1a; 本人目前大二机器人工程&#xff0c;未来想要入职嵌入式行业&#xff0c;有robomaster比赛经验本人负责电控&#xff0c;但是由于…

基因组学系列3:基因分型Phasing与单倍型参考序列HRC

1. 基因分型Phasing概念 基因分型&#xff0c;也称为基因定相、单倍体分型、单倍体构建等&#xff0c;即将一个二倍体&#xff08;或多倍体&#xff09;基因组上的等位基因&#xff08;或杂合位点&#xff09;正确定位到父亲或母亲的染色体上&#xff0c;最终使得来自同一亲本…

相亲交友APP系统婚恋交友社交软件开发语音视频聊天平台定制开发-婚恋相亲交友软件平台介绍——app小程序开发定制

互联网飞速发展的时代&#xff0c;相亲交友软件成为了许多年轻人首选的相亲方式&#xff0c;越来越多的单身男女希望在婚恋交友软件平台上寻找灵魂伴侣&#xff0c;相亲交友软件因此具有很高的市场价值。 多客婚恋相亲交友系统是一款定位高端&#xff0c;到手就能运营的成熟婚恋…

软件测评中心▏软件验收测试方法和测试内容简析

在当今数字化转型的浪潮下&#xff0c;软件验收测试变得越来越重要。软件验收测试&#xff0c;顾名思义&#xff0c;是对软件进行验收的过程中进行的一项测试。它用于确保软件在满足需求、达到预期效果后才能正式交付给客户使用。软件验收测试是一项全面、系统的测试过程&#…

sublime 3 背景和字体颜色修改

sublime 4 突然抽风&#xff0c;每次打开都显示 “plugin_host-3.3 has exited unexpectedly, some plugin functionality won’t be available until Sublime Text has been restarted” 一直没调好&#xff0c;所以我退回到sublime 3了。下载好了软件没问题&#xff0c;但是一…

半导体光电

《半导体光电》创刊于1976年&#xff0c;是由中国电子科技集团公司主管、重庆光电技术研究所&#xff08;中国电子科技集团公司第四十四研究所&#xff09;主办的中文科技期刊。本刊国内外公开发行&#xff0c;经过四十余年的发展已经成为我国光电子专业领域有代表性的刊物。 …

Zabbix 配置grafana对接

zabbix对接grafana简介 Zabbix与Grafana对接可以实现更加丰富和美观的数据可视化&#xff0c;可以让您利用Grafana强大的可视化功能来展示Zabbix收集的数据。 zabbix插件的两种安装方式 使用grafana-cli 命令进行安装在grafana管理页面中进入Administration/Plugins and dat…

2024.7.4学习日报

1、ppt前三章 5日计划 1、至少做到实验 2、java

css中文字书写方向

writing-mode 是 CSS 中的一个属性&#xff0c;用于设置文本、内联元素、表格单元格和表格列的书写方向、文本排列以及块流方向。以下是对 writing-mode 属性的详细介绍&#xff1a; 1. 语法和值 语法&#xff1a;writing-mode: horizontal-tb | vertical-rl | vertical-lr |…

在RT-Thread-Studio中添加arm_math库

1.在CMSIS\Lib\GCC中找到对应的库&#xff0c;如本文使用的libarm_cortexM4lf_math.a。将库拷贝到工程&#xff0c;并做如下图设置。搜索路径为库文件在项目中的实际位置。 2.将CMSIS\DSP\Include下的文件复制到工程目录中&#xff0c;并添加包含路径 3.添加宏定义&#xff0c…

Memcached缓存预热深度解析:加速应用性能的秘诀

Memcached缓存预热深度解析&#xff1a;加速应用性能的秘诀 在高性能计算环境中&#xff0c;Memcached作为一种广泛使用的分布式内存缓存系统&#xff0c;其缓存预热机制对于提升应用性能至关重要。缓存预热可以减少系统启动时的延迟&#xff0c;避免缓存未命中&#xff0c;从…

2806. 取整购买后的账户余额

2806. 取整购买后的账户余额 题目链接&#xff1a;2806. 取整购买后的账户余额 代码如下&#xff1a; class Solution { public:int accountBalanceAfterPurchase(int purchaseAmount) {return 100-(purchaseAmount5)/10*10;} };

QTreeWidget的简单使用

使用 QTreeWidget 实现复杂树控件功能的详细教程_treewidget 加控件-CSDN博客 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QTreeWidget> namespace Ui { class MainWindow; }class MainWindow : public QMainWindow {Q_OBJECTpu…

阿里巴巴Arthas分析调优JVM实战及常量池详解

目录 一、阿里巴巴Arthas详解 Arthas使用场景 Arthas命令 Arthas使用 二、GC日志详解 如何分析GC日志 CMS G1 GC日志分析工具 三、JVM参数汇总查看命令 四、Class常量池与运行时常量池 字面量 符号引用 五、字符串常量池 字符串常量池的设计思想 三种字符串操作…

墨烯的语言技术栈-C语言基础-005

在VS的安装路径下有一个文件: newcfile.cpp的文件 在VS工程中创建新的.c或者.cpp文件的时候,都是拷贝newcfile.cpp这个文件的! everything工具中 有一个newcfile.cpp 然后打开文件路径在newcfile.cpp 添加#define _CRT_SECURE_NO_WARNINGS替换即可 五.变量的作用域(局部变量…