2024/4/5—力扣—在排序数组中查找元素的第一个和最后一个位置

代码实现:

思路:二分法

方法一:分别查找左右侧边界

/*** Note: The returned array must be malloced, assume caller calls free().*/
int GetTargetFirstPosition(int *nums, int numsSize, int target) {int l = 0, r = numsSize - 1;while (l <= r) {int mid = (l + r) >> 1;/* 找到 target,缩小搜索区间的上界 r ,不断向左收缩锁定左侧边界 */if (nums[mid] == target) {/* 在区间 [l, mid - 1] 中查找 */r = mid - 1;} else if (nums[mid] > target) {r = mid - 1;} else if (nums[mid] < target) {l = mid + 1;}}if (l == numsSize || nums[l] != target) {return -1;}return l;
}int GetTargetLastPosition(int *nums, int numsSize, int target) {int l = 0, r = numsSize - 1;while (l <= r) {int mid = (l + r) >> 1;if (nums[mid] == target) {l = mid + 1;} else if (nums[mid] > target) {r = mid - 1;} else if (nums[mid] < target) {l = mid + 1;   }}if (r == -1 || nums[r] != target) {return -1;}return r;
}int* searchRange(int *nums, int numsSize, int target, int *returnSize) {int *res = malloc(sizeof(int) * 2);memset(res, -1, sizeof(res));*returnSize = 2;if (nums == NULL || numsSize < 1) {return res;}int firstPos = GetTargetFirstPosition(nums, numsSize, target);// 左边界没找到,右边界肯定也找不到if (firstPos == -1) {return res;}res[0] = firstPos;int lastPos = GetTargetLastPosition(nums, numsSize, target);res[1] = lastPos;return res;    
}

方法二:一次查找

/*** Note: The returned array must be malloced, assume caller calls free().*/int binarySearch(int *nums, int numsSize, int target) {int l = 0, r = numsSize - 1;         while (l <= r) {            int mid = (l + r) >> 1;  if (nums[mid] == target) {            return mid;} else if (nums[mid] > target) {      r = mid - 1;} else if (nums[mid] < target) {      l = mid + 1;}}return -1;
}int* searchRange(int *nums, int numsSize, int target, int *returnSize) {int *res = malloc(sizeof(int) * 2);memset(res, -1, sizeof(int) * 2);*returnSize = 2;if (nums == NULL || numsSize < 1) {return res;}int ind = binarySearch(nums, numsSize, target);if (ind == -1) {return res;}int i, j;for (i = ind - 1; i >= 0; i--) {if (nums[i] != target) {break;}}res[0] = i + 1;for (j = ind + 1; j < numsSize; j++) {if (nums[j] != target) {break;}}res[1] = --j;return res;
}

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

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

相关文章

springboot无人便利店信息管理系统ssm+tomcat+java

jdk版本&#xff1a;1.8 及以上 ide工具&#xff1a;IDEA 或者eclipse 数据库: mysql 编程语言: java 框架&#xff1a;SSM/springboot都有 maven: 3.6.1 前端&#xff1a;layuibootstrapjsp 详细技术&#xff1a;HTMLCSSJSjspspringmvcmybatisMYSQLMAVENtomcat本文以java实现…

Jenkins使用-绑定域控与用户授权

一、Jenkins安装完成后&#xff0c;企业中使用&#xff0c;首先需要绑定域控以方便管理。 操作方法&#xff1a; 1、备份配置文件&#xff0c;防止域控绑定错误或授权策略选择不对&#xff0c;造成没办法登录&#xff0c;或登录后没有权限操作。 [roottest jenkins]# mkdir ba…

iOS 开发中上传 IPA 文件的方法(无需 Mac 电脑

引言 在 iOS 开发中&#xff0c;将 IPA 文件上传到苹果开发者中心是一个重要的步骤。通常情况下&#xff0c;我们需要使用 Mac 电脑上的 Xcode 或 Application Loader 工具来完成这个任务。然而&#xff0c;如果你没有 Mac 电脑&#xff0c;也没有关系&#xff0c;本文将介绍一…

Windows编译运行yolov9-bytetrack-tensorrt (C++)

Windows编译运行yolov9-bytetrack-tensorrt&#xff08;C&#xff09; 1 基础环境2 编译yolov9-bytetrack-tensorrt&#xff08;1&#xff09;下载yolov9-bytetrack-tensorrt源码&#xff08;2&#xff09;修改CMakeLists.txt&#xff08;3&#xff09;CMake编译 3 yolov9模型转…

css实现各级标题自动编号

本文在博客同步发布&#xff0c;您也可以在这里看到最新的文章 Markdown编辑器大多不会提供分级标题的自动编号功能&#xff0c;但我们可以通过简单的css样式设置实现。 本文介绍了使用css实现各级标题自动编号的方法&#xff0c;本方法同样适用于typora编辑器和wordpress主题…

有没有适合运动佩戴的耳机?最适合运动使用的开放式耳机推荐

哪种耳机更适合运动&#xff0c;挂耳式和入耳式哪种更合适呢&#xff1f;答案是挂耳式的耳机更适合运动&#xff0c;适用的场景也更多。无论你是在家还是在外面运动&#xff0c;都很合适。挂耳式耳机也可以叫开放式耳机&#xff0c;它开放式的设计可以让我们更好的感知到周围嘈…

1132A安捷伦1132A示波器探头

181/2461/8938产品概述&#xff1a; 带宽: 输入阻抗: 差分输入R: 50千欧差分输入C: 0.27-0.34 pF单端输入电阻:25千欧单端输入C: 0.44-0.67 pF 连通性: E2669A差分/单端连接套件E2668A单端连接套件用于InfiniiMax探头的E2675A差分浏览器套件E2677A InfiniiMax 12 GHz差分焊…

APx500音频分析仪硬件简介

两通道模拟输出&#xff0c;两通道或以上的模拟输入接口 线性编码数字音频接口&#xff08;AES/EBU,TOSLINK,SPDIF&#xff09;Linear PCM 脉冲密度调制码流&#xff08;需要APx-PDM选件支持&#xff09; Bluetooth蓝牙音频码流&#xff08;需APx-BT选件支持&#xff09; 最…

DataGrip 2024 for Mac/Win—数据库管理的得力助手

在当今的数据驱动世界中&#xff0c;高效地管理数据库至关重要。无论您是数据库管理员、开发人员还是数据分析师&#xff0c;DataGrip 2024 都是您不可或缺的工具。 DataGrip 2024 适用于 Mac 和 Win 系统&#xff0c;具有以下卓越特性&#xff1a; 全面支持多种数据库&#…

uniapp请求后端接口

新建文件夹utils const request (config) > {// 拼接完整的接口路径config.url http://mm.test.cn config.url;//这里拼接的是访问后端接口的地址&#xff0c;http://mm.test.cn/prod-api/testconsole.log(config.url)//判断是都携带参数if(!config.data){config.data …

【方法】PDF密码如何取消?

对于重要的PDF文件&#xff0c;很多人会设置密码保护&#xff0c;那后续不需要保护了&#xff0c;如何取消密码呢&#xff1f; 今天我们来看看&#xff0c;PDF的两种密码&#xff0c;即“限制密码”和“打开密码”&#xff0c;是如何取消的&#xff0c;以及忘记密码的情况要怎…

Android Studio 生成 keystore 签名文件及打包验证流程

一、创建keystore签名文件 1、在菜单栏中&#xff0c;依次点击 Build - Generate Signed Bundle/Apk...(生成签名) 2、选择 APK 选项&#xff0c;点击按钮 Next 到下一步 3、新建key store秘钥文件&#xff0c;点击按钮 Next 到下一步 4、按如下提示填写信息&#xff0c;点击按…

Java的Maven下载和配置步骤

Maven的下载 https://maven.apache.org/download.cgi 以Windows10版本为列&#xff0c;下载如图所示的格式&#xff1a; Maven的环境配置 以Windows10为例&#xff0c;进行环境变量的配置 在点击环境变量按钮之后选择系统变量&#xff0c;首先点击新建,把这两个参数如下图输…

Python 绘制饼图

import matplotlib.pyplot as plt # 数据 labels [A, B, C, D] sizes [20, 30, 40, 10] # 饼图 plt.figure(figsize(5, 5)) plt.pie(sizes, labelslabels, autopct%1.1f%%, startangle90) #startangle 初始角度 plt.rcParams[font.sans-serif] [Times New Roman] plt.axis(e…

SUSE Linux Enterprise Server安装

1. SUSE镜像下载 下载地址&#xff1a;Evaluation Copy of SUSE Linux Enterprise Server | SUSE 选择自己需要的版本和对应的架构 选择下载SLE-15-SP5-Full-x86_64-GM-Media1.iso&#xff0c;下载时需要注册请按照提示进行注册。 2. 安装SUSE Linux 安装时可以通过连接服务…

三、SpringBoot3 整合 SpringMVC

本章概要 实现过程web 相关配置静态资源处理自定义拦截器(SpringMVC 配置) 3.1 实现过程 创建程序引入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www…

7-26 单词长度

题解&#xff1a; #include <bits/stdc.h> using namespace std; int main() {string s;getline(cin,s); //读取一行字符串char c; //记录字符int cnt 0; //用来记录长度int flag 0; //用来判断是否已经输出了第一个单词的长度for (int i 0;i<s.size(); i)…

Vue3 + Vite 构建组件库发布到 npm

你有构建完组件库后&#xff0c;因为不知道如何发布到 npm 的烦恼吗&#xff1f;本教程手把手教你用 Vite 构建组件库发布到 npm 搭建项目 这里我们使用 Vite 初始化项目&#xff0c;执行命令&#xff1a; pnpm create vite my-vue-app --template vue这里以我的项目 vue3-xm…

如何将本地项目代码上传到github代码托管平台上【小白教程】

大家好&#xff0c;我是 Just&#xff0c;这里是「设计师工作日常」&#xff0c;今天分享的是本地代码怎么上传到代码托管平台上。 最新文章通过公众号「设计师工作日常」发布。 目录 引子前提创建仓库仓库创建完成git 本地仓库初始化本地仓库&#xff08;本地项目代码&#x…

day76 jquery

知识点: 1 在HTML中引入jQuery 2 jQuery中就绪函数 3 jQuery中选择器 4 使用jQuery获取表单元素的值 及标签中间的内容 5 jQuery中获取标签属性 6 jQuery设置和获取标签样式 ----------------------------------- 一 在HTML中引入jQuery 1/*! jQuery…