C/C++ BM21 旋转数组的最小数字

文章目录

  • 前言
  • 题目
  • 解决方案一
    • 1.1 思路阐述
    • 1.2 源码
  • 解决方案二
    • 2.1 思路阐述
    • 2.2 源码
  • 总结

前言

查找算法的适用条件以及找到题目最核心的诉求是解决问题的关键。


题目

描述
有一个长度为 n 的非降序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比如变成了[3,4,5,1,2],或者[4,5,1,2,3]这样的。请问,给定这样一个旋转数组,求数组中的最小值。

数据范围: 1 ≤ n ≤ 10000 1≤n≤10000 1n10000,数组中任意元素的值: 0 ≤ v a l ≤ 10000 0≤val≤10000 0val10000
要求:空间复杂度: O ( 1 ) O(1) O(1),时间复杂度: O ( l o g n ) O(logn) O(logn)
示例1
输入: [ 3 , 4 , 5 , 1 , 2 ] [3,4,5,1,2] [3,4,5,1,2]
返回值: 1 1 1

示例2
输入: [ 3 , 100 , 200 , 3 ] [3,100,200,3] [3,100,200,3]
返回值: 3 3 3

解决方案一

1.1 思路阐述

题目说的旋转什么的,都不看,精简一下就是一个数组里面找最小值。

不考虑时间复杂度和空间复杂度的话,一个for循环遍历搞定。

1.2 源码

class Solution {
public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param nums int整型vector * @return int整型*/int minNumberInRotateArray(vector<int>& nums) {int min=nums[0];for (int i=0; i<nums.size()-1; i++) {if(nums[i]<=min){min=nums[i];}}return min;}
};

解决方案二

2.1 思路阐述

看题目给的时间复杂度和空间复杂度,大概率就是一种分治的思想,那就是二分查找。

题目的数列有一个特性,AB两个子序列组成一个序列C,现在变成了BA,由于C序列是非递减序列,所以其实B序列中任意一个数都大于A。

用二分法来做的步骤如下:

step 1:双指针指向旋转后数组的首尾,作为区间端点。
step 2:若是区间中点值大于区间右界值,则最小的数字一定在中点右边。(这里和序列特性有关系)
step 3:若是区间中点值等于区间右界值,则是不容易分辨最小数字在哪半个区间,比如[1,1,1,0,1],应该逐个缩减右界。
step 4:若是区间中点值小于区间右界值,则最小的数字一定在中点左边。
step 5:通过调整区间最后即可锁定最小值所在。

2.2 源码

class Solution {
public:int minNumberInRotateArray(vector<int>& nums) {int i=0,mid,j=nums.size()-1;while (i<j) {mid=i+(j-i)/2;if(nums[mid]>nums[j]){i=mid+1;}else if(nums[mid]==nums[j]){j--;}else{j=mid;}}return nums[i];}
};

总结

遇到有序数列的一种查找,如果对时间复杂度有要求,要考虑二分查找。

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

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

相关文章

nodejs解析url参数

需要引入 url 模块&#xff1b; var http require(http); var url require(url);http.createServer(function (req, res) {res.writeHead(200, {Content-Type: text/plain});// 解析 url 参数var params url.parse(req.url, true).query;res.write("name: " par…

初学python记录:力扣705. 设计哈希集合

题目&#xff1a; 不使用任何内建的哈希表库设计一个哈希集合&#xff08;HashSet&#xff09;。 实现 MyHashSet 类&#xff1a; void add(key) 向哈希集合中插入值 key 。bool contains(key) 返回哈希集合中是否存在这个值 key 。void remove(key) 将给定值 key 从哈希集合…

Linux部署自动化运维平台Spug

文章目录 前言1. Docker安装Spug2 . 本地访问测试3. Linux 安装cpolar4. 配置Spug公网访问地址5. 公网远程访问Spug管理界面6. 固定Spug公网地址 前言 Spug 面向中小型企业设计的轻量级无 Agent 的自动化运维平台&#xff0c;整合了主机管理、主机批量执行、主机在线终端、文件…

halcon-轴断面检测定位

前言 通常情况下轴检测时&#xff0c;通常会检测轴的各个阶段的长度。但是由于各种原因&#xff0c;在轴断面的区域现实不明显&#xff0c;无法正确提取&#xff0c;这时候需要根据轴断面的突出部分进行检测&#xff0c;但是由于部分轴的粗轴和细轴区域的宽度差距相当接近&…

windows SDK编程 --- 第一个程序

一、基础知识 1.Unicode 和 ANSI 在 Windows 编程中&#xff0c;Unicode 和 ANSI 是两种不同的字符编码方法&#xff0c;它们用于定义如何在计算机中表示和存储字符数据。 ANSI ANSI&#xff08;American National Standards Institute&#xff09;编码是一种基于单字节的字符…

使用阿里云试用Elasticsearch学习:4. 聚合——2

近似聚合 如果所有的数据都在一台机器上&#xff0c;那么生活会容易许多。 CS201 课上教的经典算法就足够应付这些问题。如果所有的数据都在一台机器上&#xff0c;那么也就不需要像 Elasticsearch 这样的分布式软件了。不过一旦我们开始分布式存储数据&#xff0c;就需要小心…

Android 蓝牙开发与 12/S 系统适配

蓝牙通信方式 经典蓝牙&#xff08;Bluetooth Classic&#xff09;通信&#xff1a; 经典蓝牙通信通常用于在较短的距离内传输大量数据&#xff0c;例如音频流、文件传输等。在 Android 中&#xff0c;你可以使用 BluetoothAdapter 和 BluetoothSocket 类来建立经典蓝牙连接&am…

Vue的学习之旅-part6-循环的集中写法与ES6增强语法

Vue的学习之旅-循环的集中写法与ES6增强语法 vue中的几种循环写法for循环for in 循环 for(let i in data){}for of 循环 for(let item of data){}reduce() 遍历 reduce( function( preValue, item){} , 0 ) ES6增强写法 类似语法糖简写对象简写函数简写 动态组件中使用 <kee…

【面试笔记】项目经理常见面试题

1、项目经理的能力和职能&#xff1f; 作为一个项目经理&#xff0c;我的主要能力和职能包括以下几个方面&#xff1a; 项目规划与管理&#xff1a;根据项目需求制定详尽的项目计划&#xff0c;包括时间表、资源分配、预算控制以及风险管理计划。确保项目在预定时间内按照既定…

实现卡片中每一条数据key的右对齐

前言&#xff1a; 在公司里面导师要求实现了卡片&#xff08;公司使用的框架是react&#xff0c;卡片引用的ant-design-moble的组件&#xff09;的功能&#xff0c;每一条数据横向展示&#xff0c;但是数据的key要实现右对齐&#xff0c;经过不断的修改&#xff0c;最后总结结…

AI应用实战2:使用scikit-learn进行回归任务实战

代码仓库在gitlab&#xff0c;本博客对应于02文件夹。 1.问题分析 在此篇博客中我们来对回归任务进行实战演练&#xff0c;背景是直播带货平台的业绩预测。第一步&#xff0c;就是分析问题。 问题痛点&#xff1a; 在直播带货平台上&#xff0c;由于市场环境多变、用户行为复…

5 个让日常编码更简单的 Python 库

今天我们一起来研究一些非常有用的第三方模块&#xff0c;可以使得我们的日常编码变得更加简单方便 sh https://github.com/amoffat/sh 如果曾经在 Python 中使用过 subprocess 库&#xff0c;那么我们很有可能对它感到失望&#xff0c;它不是最直观的库&#xff0c;可能还有些…

ubuntu 更改 ssh 默认端口 22 以加固安全

出于加固安全考虑&#xff0c;一般公司会禁用 ssh 的 22 端口号&#xff0c;因此我们需要改为其他端口。 1、ssh 命令行登录 进入台式机&#xff0c;修改 /etc/ssh/sshd_config 文件中的 Port 配置行&#xff0c;将 22 改为 8022&#xff0c;保存修改后&#xff0c;重启 ssh 服…

Vue3点击事件实现使table中最后一列可编辑的同时,表格中的滚动条自动滚动到该列位置

这个小功能我大概花了小半天的时间才实现&#xff0c;所以无比痛恨给我提这个需求的人&#xff0c;还好最后没有放弃&#xff0c;谨以此博客作为记录我被迫走上前端之路的第n天&#xff01;&#xff01;&#xff01; 代码来自项目里面的一部分&#xff0c;所以可能有点乱#&…

作文笔记6 写作顺序

时间顺序 举例&#xff1a;清晨 中午 傍晚&#xff0c;一般用来写景物 空间顺序/游览顺序 上下左右&#xff0c;前后内外 事情发展顺序 故事一般按照该顺序&#xff0c;起因&#xff0c;经过&#xff0c;结果 逻辑顺序 事理说明文&#xff0c;比如说一个事物&#xff0c…

【汇编】存储器

存储器 计算机存储器可分为内部存储器&#xff08;又称内存或主存&#xff09;和外部存储器&#xff0c;其中内存是CPU能直接寻址的储存空间&#xff0c;由半导体器件制成 存储单元的地址和内容 计算机存储信息的基本单位是一个二进制位&#xff0c;一位可存储一个二进制数&…

企业利器大曝光:CRM系统功能剖析

企业存在的根本目标是吸引并留住顾客。为了能够追踪顾客的信息以及与他们保持联系&#xff0c;不论企业规模大小&#xff0c;都长期使用了多种传统的手工方式。——彼得德鲁克 CRM系统的功能有哪些&#xff1f;如何做客户管理一直是企业管理中的热门话题&#xff0c;CRM&#…

[大模型]Qwen1.5-7B-Chat-GPTQ-Int4 部署环境

Qwen1.5-7B-Chat-GPTQ-Int4 部署环境 说明 Qwen1.5-72b 版本有BF16、INT8、INT4三个版本&#xff0c;三个版本性能接近。由于BF16版本需要144GB的显存&#xff0c;让普通用户忘却止步&#xff0c;而INT4版本只需要48GB即可推理&#xff0c;给普通用户本地化部署创造了机会。&…

C语言——数据在内存中的存储

引言 数据是程序运行的核心。当我们用C语言编写程序时&#xff0c;我们实际上是在操纵内存中的数据。这些数据在内存中是如何储存的&#xff0c;今天我们就来学习这些内容。 基本数据类型 1.整型 int: 基本整型&#xff0c;通常占用4个字节 short: 短整型&#xff0c;通常占用…

图像处理特征提取

图像处理中的特征提取是指从图像数据中提取出具有区分性和代表性的特征&#xff0c;以用于图像分类、目标检测、图像匹配等任务。下面介绍几种常见的图像处理特征提取方法&#xff1a; 颜色特征&#xff1a;颜色是图像中最直观且重要的特征之一。常见的颜色特征提取方法包括颜色…