当前位置: 首页 > news >正文

【题解】旋转数组的最小数字、比较版本号

文章目录

  • 旋转数组的最小数字
  • 比较版本号

旋转数组的最小数字

题目链接:旋转数组的最小数字

解题思路1:遍历求最小值

代码如下:

    int minNumberInRotateArray(vector<int> rotateArray) {int min = rotateArray[0];for(auto const& e: rotateArray){if(e < min){min = e;}}return min;}

解题思路2:比大小,最小的值一定是从数组最大值开始减小的那个值,也就是说第一次不是递增的那个值就是最小值,另一种情况是数组的第一个值,比如[1,2,2,2,2]这种情况

代码如下:

    int minNumberInRotateArray(vector<int> rotateArray) {for(int i=0; i<rotateArray.size()-1; ++i){if(rotateArray[i+1] < rotateArray[i])return rotateArray[i+1];}return rotateArray[0];}

解题思路3:二分

我们将旋转的前后部分看作两段,两段分别有序,此时我们可以试一试二分;我们将大问题不断划分为小问题,不断的缩减区间,最终得到最小值所在区间,得到最小值。

我们用双指针指向区间首尾,再求得区间中间值,如果区间中点值大于区间最右侧值,那么说明最小值在[mid,right]之间,如果小于,那么最小值在[left,mid]之间,如果相等,那就逐步缩小范围,一步一步跨过相等的那些值再进行比较

代码如下:

    int minNumberInRotateArray(vector<int> rotateArray) {int left = 0;int right = rotateArray.size() - 1;while(left < right){int mid = (left + right) / 2;if(rotateArray[mid] > rotateArray[right]){left = mid + 1;}else if(rotateArray[mid] == rotateArray[right]){right--;}else {right = mid;}}return rotateArray[left];}

比较版本号

题目链接:比较版本号

解题思路:双指针

我们用点来对版本号字符串进行分割,比较这两个版本号,直接使用双指针来进行比较,两个指针分别指向两个字符串进行比较

同时,由于前导零不参与比较,我们不知道数字前面有多少个前导零,所以还是将字符串转化为数字比较更方便

代码如下:

    int compare(string version1, string version2) {int n1 = version1.size();int n2 = version2.size();int i = 0;//version1的指针int j = 0;//version2的指针while(i < n1 || j < n2){long long num1 = 0;while(i < n1 && version1[i] != '.'){num1 = num1*10 + (version1[i]-'0');i++;}i++;long long num2 = 0;while(j < n2 && version2[j] != '.'){num2 = num2*10 + (version2[j]-'0');j++;}j++;if(num1 > num2) return 1;if(num1 < num2) return -1;}return 0;}

解题思路2:分割后比较

以点为间隔,将字符串进行分割,分割转化为数字存放进数组,再依次取出数组中的元素进行一一对比,得出结果

代码如下:

    //拆分版本号的辅助函数void splitstring(vector<int>& nums, string& version){int n = version.size(), num = 0;for(int i=0; i<n; ++i){if(version[i] == '.'){nums.push_back(num);num = 0;}else{num = num*10 + (version[i]-'0');}}nums.push_back(num);//最后一段数字}int compare(string version1, string version2) {vector<int> nums1, nums2;splitstring(nums1, version1);splitstring(nums2, version2);int n1 = nums1.size();int n2 = nums2.size();int p1 = 0, p2 = 0;for(int i=0; i<max(n1,n2); ++i){p1 = i < n1 ? nums1[i] : 0;p2 = i < n2 ? nums2[i] : 0;if(p1 > p2) return 1;if(p1 < p2) return -1;}return 0;}

相关文章:

【题解】旋转数组的最小数字、比较版本号

文章目录 旋转数组的最小数字比较版本号 旋转数组的最小数字 题目链接&#xff1a;旋转数组的最小数字 解题思路1&#xff1a;遍历求最小值 代码如下&#xff1a; int minNumberInRotateArray(vector<int> rotateArray) {int min rotateArray[0];for(auto const&…...

springboot系统内多级调用报错日志输出顺序

忘记,模糊,故专门验证下 比如方法1调用方法2 方法2又调用方法3 方法3报错 那么报错日志中哪个方法所在行先打印出来? 直接上测试代码 package pers.wwz.study.exception.controller;import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.Requ…...

django——配置 settings.py 及相关参数说明

3. 配置 settings.py 及相关参数说明 3.1 配置setting.py文件 设置setting.py文件 加入安装的库 apps.erp_test, rest_framework, django_filters, drf_spectacular,加入新增的APP users启动项目 # 运行项目先执行数据库相关操作&#xff0c;再启动 django 项目 python manag…...

OptaPlanner笔记1

1.1 什么是OptaPlanner 每个组织都面临规划问题&#xff1a;为产品或服务提供有限的受约束的资源&#xff08;员工、资产、时间和金钱&#xff09;。OptaPlanner用来优化这种规划&#xff0c;以实现用更少的资源来做更多的业务。 这被称为Constraint Satisfaction Programming…...

github 镜像站及下载加速网址

1、提供常用的镜像网址&#xff08;记住千万别登录账号&#xff09;&#xff1a; https://github.com.cnpmjs.org https://hub.fastgit.org https://hub.nuaa.cf/ https://hub.yzuu.cf/ https://hub.njuu.cf/上面的网址是一个克隆版的Github&#xff0c;上面的镜像网站内容跟G…...

大数据-玩转数据-Flink RedisSink

一、添加Redis Connector依赖 具体版本根据实际情况确定 <dependency><groupId>org.apache.flink</groupId><artifactId>flink-connector-redis_2.11</artifactId><version>1.1.5</version> </dependency>二、启动redis 参…...

c++病毒/恶搞代码大全( 上 )

注&#xff1a;以下代码应勿用于非法&#xff08;Dev-c5.11实测可用&#xff09; 1: 效果:无限生成cmd 解决方法&#xff1a;关闭程序即可 #include<bits/stdc.h> #include<windows.h> using namespace std; int main() {while(1)system("start cmd"…...

【数学建模】清风数模更新5 灰色关联分析

灰色关联分析综述 诸如经济系统、生态系统、社会系统等抽象系统都包含许多因素&#xff0c;系统整体的发展受各个因素共同影响。 为了更好地推动系统发展&#xff0c;我们需要清楚哪些因素是主要的&#xff0c;哪些是次要的&#xff0c;哪些是积极的&#xff0c;哪些是消极的…...

Windows下运行Tomcat服务时报GC Overhead Limit Exceeded

根本原因是在新建Tomcat作为Windows服务时&#xff0c;系统默认设置的堆内存太小了&#xff0c;我们打开/bin/service.bat文件&#xff0c;将如下图所示的默认值改大一些就好了 if "%JvmMs%" "" set JvmMs512 if "%JvmMx%" "" set J…...

OpenCV实例(八)车牌字符识别技术(一)模式识别

车牌字符识别技术&#xff08;一&#xff09;模式识别 1.模式识别流程2. 模式识别方式 影响并导致汽车牌照内字符出现缺损、污染、模糊等情况的常见因素有照相机的性能、采集车辆图像时光照的差异、汽车牌照的清洁度等。为了提高汽车牌照字符识别的准确率&#xff0c;本节将把英…...

OPENCV C++(七)霍夫线检测+找出轮廓和外接矩形+改进旋转

霍夫线检测 vector<Vec2f> lines1;HoughLines(canny_mat, lines1, 1, CV_PI / 180.0,90 );//45可以检测里面两条线 80检测出外边两条线 定义存放输出线的向量 此向量输出有<距离&#xff0c;角度> 因为检测的原理就是在变换霍夫空间里面去检测的&#xff0c;这里可…...

Error: EACCES: permission denied, rename ‘/usr/local/lib/node_modules/appium‘

在使用npm uninstall -g appium卸载appium的过程中报错 Error: EACCES: permission denied, rename /usr/local/lib/node_modules/appium -> /usr/local/lib/node_modules/.appium-cfBVovI6 npm ERR! code EACCES npm ERR! syscall rename npm ERR! path /usr/local/lib/n…...

CentOS 7中,配置了Oracle jdk,但是使用java -version验证时,出现的版本是OpenJDK,如何解决?

1.首先&#xff0c;检查已安装的jdk版本 sudo yum list installed | grep java2.移除、卸载圈红的系统自带的openjdk sudo yum remove java-1.7.0-openjdk.x86_64 sudo yum remove java-1.7.0-openjdk-headless.x86_64 sudo yum remove java-1.8.0-openjdk.x86_64 sudo yum r…...

牛客 松鼠回家(二分答案+最短路)

题目描述 松鼠宝宝由于贪玩去了一个具有n个点和m条边的无向图中&#xff0c;现在松鼠宝宝仅有h点体力&#xff0c;所有的边经过一次后会消耗部分体力&#xff0c;同时松鼠爸爸为了惩罚贪玩的松鼠宝宝&#xff0c;每到一个点会扣除部分松果&#xff08;起点的松果也会扣除&#…...

Mysql in 查询的奇怪方向

Mysql in 查询的奇怪方向 关于表字段存储的数据为 num1,num2,num3时, 还要通过多个num1,num2入参针对该字段进行查询 建表语句 CREATE TABLE test (test_ids varchar(100) DEFAULT NULL COMMENT 保存ids 以逗号分隔 ) ENGINEInnoDB;数据项 查询语句 SELECT test_ids FROM t…...

ORB-SLAM2第二节---双目地图初始化

比起单目初始化&#xff0c;而双目实现地图的初始化非常简单&#xff0c;只需要一帧&#xff08;左右目图像&#xff09;即可完成初始化。 行特征点统计。考虑用图像金字塔尺度作为偏移量&#xff0c;在当前点上下正负偏移量&#xff08;r)内的纵坐标值都认为是匹配点可能存在…...

后端常使用的中间件知识点--持续更新

类型难度mysqlmysql中SQL优化&#xff1a;多角度分析包学包会&#xff0c;sql优化全过程&#xff0c;刨根分析redis多角度剖析redis数据结构及底层实现原理、应用场景MQ简单大体说明RabbitMQ的使用&#xff08;简单版&#xff09;mybatis使用JDBC的批量插入百万数据要多少秒一遍…...

非科班的大家如何顺滑转码

近年来&#xff0c;很多人想要从其他行业跳槽转入计算机领域。非计算机科班如何丝滑转码&#xff1f;请来聊聊你的看法和观点&#xff0c;我本身是信息与计算科学专业&#xff0c;周围的同学有不少也是被这个名字“骗过来的”&#xff0c;看这个名字都以为是计算机相关专业&…...

webpack中常见的Loader

目录 1.webpack中的loader是什么&#xff1f;配置方式 2. loader特性3.常见的loader 1.webpack中的loader是什么&#xff1f; loader 用于对模块的"源代码"进行转换&#xff0c;在 import 或"加载"模块时预处理文件 webpack做的事情&#xff0c;仅仅是分…...

RabbitMQ:可靠消息传递的强大消息中间件

消息中间件在现代分布式系统中起着关键作用&#xff0c;它们提供了一种可靠且高效的方法来进行异步通信和解耦。在这篇博客中&#xff0c;我们将重点介绍 RabbitMQ&#xff0c;一个广泛使用的开源消息中间件。我们将深入探讨 RabbitMQ 的特性、工作原理以及如何在应用程序中使用…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

通过MicroSip配置自己的freeswitch服务器进行调试记录

之前用docker安装的freeswitch的&#xff0c;启动是正常的&#xff0c; 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...

02.运算符

目录 什么是运算符 算术运算符 1.基本四则运算符 2.增量运算符 3.自增/自减运算符 关系运算符 逻辑运算符 &&&#xff1a;逻辑与 ||&#xff1a;逻辑或 &#xff01;&#xff1a;逻辑非 短路求值 位运算符 按位与&&#xff1a; 按位或 | 按位取反~ …...

leetcode_69.x的平方根

题目如下 &#xff1a; 看到题 &#xff0c;我们最原始的想法就是暴力解决: for(long long i 0;i<INT_MAX;i){if(i*ix){return i;}else if((i*i>x)&&((i-1)*(i-1)<x)){return i-1;}}我们直接开始遍历&#xff0c;我们是整数的平方根&#xff0c;所以我们分两…...