C语言每日一题之旋转数求最小值

news2024/9/23 11:24:06

hello,今天我们分享一道题目,是牛客网上的一道题

求旋转数组中的最小值https://www.nowcoder.com/practice/9f3231a991af4f55b95579b44b7a01ba?tpId=13&tqId=23269&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

那我们先来看一下题目的意思,首先要读懂题目讲的是什么
在这里插入图片描述
题目说一个非降序数组,什么是非降序呢,像1 2 3 4 5这种升序 也可以是1 1 2 2 3 4这种,但是大家可不要误解认为他是非序,非序就是随机数这些。
这道题呢有两种解法,一种就是我们从前往后一个一个比较过去,先定义一个min=首项,然后比他小的就赋值给min,这种大家就会,那今天我们就讲一下用二分查找的思路来给大家写

二分查找呢就是一个有序数组中,我们想要找一个数的位置的时候 ,我们取中间的数来进行比较,比如有一个升序数组,我们取出中间数,和我们要取的值进行比较,如果大于中间数,说明这个数在这个中间数的后面,那我们取中间数后面的数一直到最后的数的中间数,在进行比较,经过我们这样找数的方式,可以快速的找到它的位置

那我们就可以用这样的思路来分析这道题

  1. 中间大于右边 [3, 4, 5, 1, 2],这种情况下,最小数一定在右边;则left = middle + 1
  2. 中间等于右边 [1, 0, 1, 1, 1], 这个是[0, 1, 1, 1, 1] 旋转过来的,这时候需要缩小范围 right–;,注意不能是
    left++,因为是非降序数组,所以要缩小右边范围,把较小值向右推,符合我们的判断规则。
  3. 中间小于右边 [5, 1, 2, 3, 4], 这种情况下,最小数字则在左半边;则right = middle
int minNumberInRotateArray(int* rotateArray, int rotateArrayLen ) {
if (rotateArrayLen == 0) return 0;
int left = 0, right = rotateArrayLen - 1, mid;
if (rotateArray[right] > rotateArray[left]) return rotateArray[0];
while(left < right) {
mid = left + (right - left) / 2;
if (rotateArray[mid] > rotateArray[right]) left=mid+1;
//中间的数大,那么我们就要往mid后面找,说明最小值在mid后面
//而且保证mid不是最小数,因为right有更小的数
else if (rotateArray[mid] == rotateArray[right]) right--;
//如果是这样的旋转数{0,1,1,1,1,1,1}
else right = mid;//中间的数小,那我们就要往右边找,而且这个中间数也可以是最小的数,所以不能写成right=mid-1
}
return rotateArray[left];//因为只有right=left的时候while循环条件不满足,那么才会退出循环,所以这里写right也对
}

今天的分享就到这,我们一起加油

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

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

相关文章

创新指南 | 用这8种商业分析模型,让你得到靠谱的业务创新灵感

当我们想要创新时&#xff0c;往往需要有实际的依据来支撑我们的想法。商业咨询顾问通常被认为是聪明的人&#xff0c;他们拥有模型化的分析思维&#xff0c;这种思维方式可以帮助他们更好地理解市场、竞争对手和客户需求。商业分析思维是一种系统性的思考方式&#xff0c;它可…

P1 第一章 电路模型与电路定律

1、什么是电路模型&#xff1f; 实际电路与电路模型间的关系&#xff1f;建立在相同的电路理论基础之上。 实际电路定义&#xff1a;由电工设备和电气器件&#xff0c;按照预期目的连接构成的&#xff0c;电流的通路。 实际电路的功能&#xff1a;能量方面&#xff0c;可以传输…

【计算机网络】第三章 数据链路层(MAC地址 IP地址 ARP协议)

文章目录 3.7.1 MAC地址3.7.2 IP地址3.7.3 ARP协议 3.7.1 MAC地址 MAC地址&#xff08;Media Access Control address&#xff09;是网络设备&#xff08;如网卡、无线网卡&#xff09;在数据链路层上的唯一标识符。以下是有关MAC地址的一些要点&#xff1a; 描述&#xff1a…

超详细,Jmeter性能测试-模拟100个用户并发(实战)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 100个真实的用户 …

【uniapp调用微信支付】uniapp开发小程序-调用微信支付

哈喽大家好~我是马小跳。一名进阶中的程序媛。 在这里记录下自己成长的每一次进步&#xff0c;希望遇到志同道合的猿友 一起努力&#xff0c;一起把技术up up up&#xff01;&#xff01;&#xff01; 使用uniapp开发小程序时&#xff0c;调用微信支付的步骤如下&#xff1a; …

Web项目中耗时操作,用异步请求,减少请求等待时间,使用Redis保证操作幂等性

最近项目中碰到了一个接口需要比较耗时的操作&#xff0c;但是我们公司前后端交互的网关设置了超时时间。因此我需要设置出一个方案保证给用户比较快的响应&#xff0c;又保证任务执行了。因此我采用了&#xff0c;下面的操作方式。 客户端发送请求后&#xff0c;我会先去Redis…

MySQL数据库,创建表及其插入数据和查询数据

首先&#xff0c;由上图创建表 mysql> create table worker(-> dept_id int(11) not null,-> emp_id int (11) not null,-> work_time date not null,-> salary float(8,2) not null,-> poli_face varchar(10) not null default 群众,-> name varchar(20…

中文模型的奋起直追:MOSS、baichuan-7B和ChatGLM2-6B的原理、部署与微调

第一部分 复旦MOSS MOSS是复旦大学邱锡鹏团队推出的一个支持中英双语和多种插件的开源对话语言模型&#xff0c;moss-moon系列模型具有160亿参数&#xff0c;在FP16精度下可在单张A100/A800或两张3090显卡运行&#xff0c;在INT4/8精度下可在单张3090显卡运行 其基座语言模型…

【React笔记】react循环列表的写法

react循环的写法 简单循环输出人名简单循环输出json格式数组 简单循环输出人名 循环输出people数组中的四个人名 import ReactDOM from react-dom/client;const people [宋江,卢俊义,吴用,公孙胜 ]; const root ReactDOM.createRoot(document.getElementById(root)); root.…

深度学习入门知识总结

0、前言&#xff1a;学习了深度学习入门的鱼书&#xff0c;很多基础概念有了大概了解&#xff0c;及时总结&#xff0c;方便日后查找 1、神经网络&#xff08;深度学习&#xff09;的起源算法——感知机&#xff1a; 定义&#xff1a;感知机接收多个输入信号&#xff0c;输出一…

【C++修炼之路】33.特殊类设计

每一个不曾起舞的日子都是对生命的辜负 特殊类设计 一.设计一个类&#xff0c;不能被拷贝二.设计一个类&#xff0c;只能在堆上创建对象1. 普通类的创建对象2.只能在堆上创建对象的类 三.设计一个类&#xff0c;只能在栈上创建对象四.设计一个类&#xff0c;不能被继承五.单例模…

Flink使用总结

本文主要是为Flink的java客户端使用和flink-sql使用的大致介绍&#xff0c;具体使用查看文档页面。 java client使用 文档 Apache Flink Documentation | Apache Flink 数据处理模型 maven依赖 <?xml version"1.0" encoding"UTF-8"?> <pro…

【YOLOv8-Seg】实战二:LabVIEW+OpenVINO加速YOLOv8-seg实例分割

‍‍&#x1f3e1;博客主页&#xff1a; virobotics的CSDN博客&#xff1a;LabVIEW深度学习、人工智能博主 &#x1f384;所属专栏&#xff1a;『LabVIEW深度学习实战』 &#x1f37b;上期文章&#xff1a; 【YOLOv8-seg】实战一&#xff1a;手把手教你使用YOLOv8实现实例分割 …

【数据分析 - 基础入门之NumPy⑥】- NumPy案例巩固强化

文章目录 前言一、NumPy基础训练1.1 创建一个长度为10的一维全为0的ndarray对象&#xff0c;并让第5个元素为11.2 创建一个元素为从10到49的ndarray对象1.3 将第2题的所有元素位置反转1.4 创建一个10*10的ndarray对象并打印最大最小元素1.5 创建一个10*10的ndarray对象&#xf…

程序设计相关概念

计算机概念 计算机是根据指令操作数据的设备。具有功能性和可编程性的特点。 功能性&#xff1a;对数据的操作&#xff0c;表现为数据计算、输入输出处理和结果存储等。 可编程性&#xff1a;根据一系列指令自动地、可预测地、准确地完成操作者的意图。 计算机的发展 计算机…

【LVS负载均衡集群】

文章目录 一.什么是集群1.集群的含义 二.集群使用在那个场景三.集群的分类1.负载均衡器集群2.高可用集群3.高性能运算集群 四.负载集群的架构1.第一层&#xff0c;负载调度器2.第二层&#xff0c;服务器池3.第三层&#xff0c;共享存储 五.负载均衡集群的工作模式1.地址转换 &a…

Unity减少等待快速进入运行

我们平时播放时一旦修改了c#的脚本总要加载进行等待&#xff0c;网上也缺乏如何设置&#xff0c;以及为什么&#xff1f;这样做可以达到这样的效果。 ------如何设置&#xff1f;【默认并不会开启】 Edit->Project Settings->Editor->Enter Player Mode Options 这样…

企业为什么要做自动化测试?如何成功实施自动化测试?

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 企业为什么需要自…

【LeetCode热题100】打卡第33天:环形链表LRU缓存

文章目录 【LeetCode热题100】打卡第33天&#xff1a;环形链表&LRU缓存⛅前言 环形链表&#x1f512;题目&#x1f511;题解 LRU缓存&#x1f512;题目&#x1f511;题解 【LeetCode热题100】打卡第33天&#xff1a;环形链表&LRU缓存 ⛅前言 大家好&#xff0c;我是知…

C++ 实现生产者消费者模型 (线程同步、互斥锁、条件变量锁)详细注释

代码结构 任务&#xff1a;这里用一个int类型的taskNumber代替任务任务队列类&#xff1a;封装了任务队列&#xff0c;存&#xff0c;取等操作。生产者工作函数&#xff1a;生产者执行的函数&#xff0c;向任务队列中添加任务&#xff0c;每个生产者生产3个任务消费者工作函数…