一. 简介

本文记录一下力扣网上涉及数组的问题:排序数组中查找目标值的位置。主要以C语言实现。

二. 力扣网C语言编程题:在数组中查找目标值位置

题目:在排序数组中查找元素的第一个和最后一个位置

给你一个按照非递减顺序排列的整数数组 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]

提示:
    0 <= nums.length <= 105
    -109 <= nums[i] <= 109
    nums 是一个非递减数组
    -109 <= target <= 109

题目分析:

首先,题目提到数组是非递减序列,就是说从左到右元素是不严格递增的,即每个元素大于或等于前一个元素。

其次,题目要求方法的时间复杂度必须是  O(log n)。

结合上面的信息可推测,本题目可能是要求使用二分查找法来实现。

1. 解题思路一(暴力解法):

利用数组有序的特点从头到尾遍历一遍数组(相等的元素都在一起)。

暴力解法就是直接遍历数组,找到 target第一次出现的位置和最后一次出现的位置。

这种解法的其实不满足题目要求的,因为这种方法的时间复杂度是 O(n),已经超过 O(log n)。

具体方法如下:

(1) 动态申请一段内存存放返回的数据(只要 存储2个元素的缓存即可);首先,缓存中元素都赋值为 -1;

(2) 遍历数组,判断 nums[i] 是否等于 target:

如果nums[i] 等于 target:再判断 ret_ptr[0] 是否为初始值(确认是否是第一次出现的位置);

ret_ptr[0] 是初始值:则记录元素Index:ret_ptr[0] = index;ret_ptr[0] 不是初始值,则将当前的 index值更新到ret_ptr[1]: ret_ptr[1] = index;

C语言实现如下:

//暴力解法
/*** Note: The returned array must be malloced, assume caller calls free().*/
int* searchRange(int* nums, int numsSize, int target, int* returnSize) {int i;int* ret_ptr = (int*)malloc(2* sizeof(int));ret_ptr[0] = -1;ret_ptr[1] = -1;if((nums == NULL) || (numsSize <= 0) || (returnSize == NULL)){return ret_ptr;}*returnSize = 2;for(i = 0; i < numsSize; i++) {if(nums[i] == target) {if(ret_ptr[0] == -1) { //判断是否是第一次出现的位置,是则记录下元素的indexret_ptr[0] = i;}ret_ptr[1] = i; //记录最后一次出现的位置}}return ret_ptr;
}

这里实现上注意,当数组为空时,处理上返回了 申请的内存指针(但是这里内存也赋了初始值),而不是返回NULL。这样做比较合适。

上面实现方法虽然编译通过,但是该实现方法时间复杂度为 O(n),不满足题目要求。

下一篇文章使用二分查找法进行实现,因为二分查找法符合题目要求(时间复杂度为O(log n))。

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

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

相关文章

OSCP - Proving Grounds - tre

主要知识点 突破边界的方法比较多样观察pspy64的检测结果 具体步骤 依旧nmap扫描开始,开放了80,8082,22端口 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-12-16 03:39 UTC Nmap scan report for 192.168.56.84 Host is up (0.00083s latency). Not shown: 65532 c…

【Mars3d】支持的basemaps数组与layers数组的坐标系列举

问题场景&#xff1a; basemap 是epsg4326的。&#xff0c;layer 图层是 epsg 4450的。可以在一个页面中展示吗&#xff1f; 回复&#xff1a; 可以不同坐标系叠加&#xff0c;但layer 图层是 epsg 4450的只支持arcgis动态服务&#xff0c;其他情况的不支持 wmts只支持3个坐标…

【算法】509. 斐波那契数

509. 斐波那契数 简单 相关标签 premium lock icon 相关企业 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。也就是&#xff1a; F(0) 0&#xff0c;F(1) 1 …

FOC学习笔记(5)内嵌式电机与表贴式电机的区别

1. 引言 在现代电机设计中&#xff0c;永磁同步电机&#xff08;Permanent Magnet Synchronous Motor, PMSM&#xff09;因其高效率、高功率密度和优异的动态性能&#xff0c;在工业、新能源汽车、航空航天等领域得到广泛应用。根据永磁体在转子中的安装方式不同&#xff0c;永…

算法 按位运算

按位与&#xff08;Bitwise AND&#xff09;和按位异或&#xff08;Bitwise XOR&#xff09; 按位与&#xff08;&&#xff09; 按位与是对两个数的二进制表示的每一位进行逻辑与操作。 规则&#xff1a;两个对应位都为1时&#xff0c;结果位才为1&#xff0c;否则为0。…

python3GUI--基于PyQt5+SQLite3的网址审核系统(详细图文)

文章目录 一&#xff0e;前言二&#xff0e;相关知识1.PyQt52.sqlite3 三&#xff0e;效果预览1.登录2.注册3.普通用户身份权限4.管理员身份权限 三、技术讨论1.数据展示表格1. 更强的表现力和交互性&#xff08;前端功能丰富&#xff09;2. 数据处理效率更高&#xff08;支持大…

与后端现场联调mock数据

当我们后端在现场没办法连后端本地就可以使用mock数据&#xff0c;模拟后端返回数据。使用工具&#xff1a;apifox 一、安装好以后--新建接口 举个栗子&#xff1a; 我想建个接口http://123.123.123.123:8080/api/login 二、 新建期望&#xff0c;返回固定值&#xff0c;否则…

C# 事件(发布者和订阅者)

发布者和订阅者 很多程序都有一个共同的需求&#xff0c;即当一个特定的程序事件发生时&#xff0c;程序的其他部分可以得到 该事件已经发生的通知。 发布者/订阅者模式&#xff08;publisher/subscriber pattem&#xff09;可以满足这种需求。在这种模式中&#xff0c;发布 …

RediSearch高性能全文搜索引擎

RediSearch 是 RedisLabs 团队开发的一个高性能全文搜索引擎&#xff0c;可作为一个 Redis Module 运行在 Redis 上。 Redis7&#xff1a;百万数据级Redis Search 超越 ElasticSearch Redis Search是基于Redis的全文搜索引擎模块&#xff08;RediSearch&#xff09;&#xff0c…

菜谱大全——字符串处理艺术:从文本解析到高效搜索 [特殊字符][特殊字符]

目录 前言一、现实场景二、技术映射2.1 基础刀工&#xff1a;String类2.2 高效剁馅&#xff1a;StringBuilder2.3 精准雕刻&#xff1a;正则表达式 三、知识点呈现3.1 String vs StringBuilder vs StringBuffer3.2 正则表达式核心语法速查3.3 字符串拼接性能陷阱 四、代码实现五…

webpack+vite前端构建工具 -答疑

webpack答疑 1 输入webpack命令&#xff0c;执行的是全局版本还是本地版本的webpack 当在命令行窗口输入webpack命令时&#xff0c;其执行优先级可通过以下步骤明确判断&#xff1a; 1.1 【全局安装优先机制】 执行原理&#xff1a;系统会按照环境变量PATH的顺序逐级查找可执…

API接口开放平台 Crabc 3.4 发布

Crabc 是一款 API 接口开发平台&#xff0c;企业级接口管理、SQL2API 平台。支持动态数据源、动态 SQL 和标签&#xff0c; 支持接入&#xff08;mysql、oracle、达梦、TiDB、hive、es 和 mongodb&#xff09;等 SQL 或 NoSQL 数据源&#xff0c;在线可视化编写 SQL 快速发布接…

PD快充协议芯片XSP04D支持全协议+支持串口通讯+支持与主板共用一个Type-C

随着Type-C接口的充电器普及&#xff0c;市面上的PD充电器越来越多&#xff0c;小家电产品可不配充电器&#xff0c;使用Type-C接口&#xff0c;然后加入一颗PD协议取电协议芯片XSP08即可让充电器/充电宝/车充等电源输出9V/12V/15V/20V电压给产品供电。 针对各种各样的不同需求…

C# 高效加载txt文件内容

在 C# 中&#xff0c;高效加载 TXT 文件内容可以通过多种方法实现&#xff0c;具体方法的选择取决于文件的大小和读取需求。以下是一些常用的方法&#xff1a; 1. 使用 File.ReadAllText 如果文件比较小&#xff0c;并且你希望一行一行地读取整个内容&#xff0c;可以使用 Fi…

(2)pytest执行用例的规则

1. 简介 今天主要学习一下pytest的执行用例的规则。 2. 通过help帮助查看pytest如何使用 .查看pytest命令行参数&#xff0c;可以用pytest -h 或pytest --help查看 3. 用例设计原则 文件名以test_*.py文件和*_test.py以test_开头的函数以Test开头的类以test_开头的方法所有的…

InnoDB数据页

导读&#xff1a; 我们已经知道了页是数据库存储的基本单位&#xff0c;知道了一条行记录的存储格式是怎样的&#xff0c;当数据越来越多时&#xff0c;那一条条行记录具体又是怎么在页中被组织起来的呢&#xff1f; 一、InnoDB数据页结构 二、总结 1、一条条行数据是如何在数…

世赛背景下,中职物联网应用与服务赛项实训解决方案

一、世赛背景与物联网应用赛项概述 1.1 世赛发展历程及对中职教育的影响 世界技能大赛&#xff08;WorldSkills Competition&#xff0c;简称世赛&#xff09;自1950年创立以来&#xff0c;已经成为全球范围内展示职业技能水平的重要赛事。截至2024年&#xff0c;世赛已成功举…

【攻防篇】解决:阿里云docker 容器中自动启动xmrig挖矿-- 实战

文章目录 场景一、问题二、原因三、解决方案1、控制台处理2、 [清除与防护](https://blog.csdn.net/ladymorgana/article/details/148921668?spm1001.2014.3001.5501)1. 紧急处理&#xff1a;停止挖矿进程2. 清理被感染的容器3. 防护措施&#xff1a;防止再次被入侵4. 排查入侵…

飞算智造JavaAI:智能编程革命——AI重构Java开发新范式

文章目录 引言&#xff1a;当传统Java开发遇上AI一、技术架构解析1.1 核心架构图1.2 关键技术栈 二、实战演示&#xff1a;从需求到代码的全AI辅助2.1 场景&#xff1a;电商优惠券系统开发2.2 代码生成实例2.3 智能调试演示 三、与传统开发模式对比测试3.1 基准测试数据3.2 典型…

[特殊字符] 分享裂变新姿势:用 UniApp + Vue3 玩转小程序页面分享跳转!

在如今流量成本日益攀升的移动互联网时代&#xff0c;"用户分享拉新" 成为了增长的重要策略。而微信小程序作为天然具备社交传播力的平台&#xff0c;提供了较完善的分享机制支持。本文将从实战角度出发&#xff0c;手把手教你如何使用 uni-app Vue3 构建一个支持「…