剑指offer(5) 旋转数组中的最小值

旋转数组求最小值(思路与解析) 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 说实话刚刚遇到这个问题我连这个问题具体问的是什么我都没有搞懂,然后稍微还是看了几分钟还是看懂了题目,但是我... 阅读详情
  • 题目描述

    把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减序列的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1

  • 程序分析:

    数据(1)数据(2)数据(3)数据(4)数据(5)
    12345
    ==========>
    56734
    ======>====>
    84567
    ==>========>
  • 我们通过观察可以得到如果 数据(1)(开始的数据)和 数据(5)(末尾的数据)的大小可以得到,如果1<5,那么整个数组有序。第一个数就是我们要寻找的数。如果1>5,那么最小的数指可定在中间.程序的中间的顺序是一句如第二列的数据4->5增大,第三列7->8增大,那么直到我们遇到顺序相反时,那么就可以获取到我们的数值。

#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
    int minNumberInRotateArray(vector<int> rotateArray) {
        bool flag = true;
        int min = 0;
        int size = rotateArray.size();
        if (rotateArray[0]<rotateArray[size - 1]){
            flag = true;
        }
        else {
            flag = false;
        }
        for (unsigned int i = 0; i< rotateArray.size() - 1; i++){
            if (rotateArray[i]<rotateArray[i + 1]){
                if (flag == true){
                    return rotateArray[i];
                }
            }
            else if (rotateArray[i]>rotateArray[i + 1]){
                if (flag == false){
                    return rotateArray[i + 1];
                }
            }

        }
        return 0;
    }
};


void main()
{
    getchar();
    vector<int> v;
    Solution *so = new Solution();
    for (int i = 1; i < 6; i++)
    {
        printf("%3d", i);
        v.push_back(i);
    }
    int num = so->minNumberInRotateArray(v);
    printf("最小值 %d\n",num);
    vector<int> v1;
    for (int i = 0; i < 5; i++)
    {
        printf("%3d", (7+i)%5+3);
        v1.push_back((7 + i) % 5+3);
    }
    num = so->minNumberInRotateArray(v1);
    printf("最小值 %d\n", num);

    vector<int> v3;
    for (int i = 0; i < 5; i++)
    {
        printf("%3d", (9+ i) % 5 + 4);
        v3.push_back((9+ i) % 5 + 4);
    }
    num = so->minNumberInRotateArray(v3);
    printf("最小值 %d\n", num);

    getchar();
}
  • 结果
    这里写图片描述
  • 这个解决方案在牛客网上运转程序失败,程序段溢出

  • 我们换个方法,我们找到前面的数比后面的数大

class Solution {
public:
    int minNumberInRotateArray(vector<int> rotateArray) {
        if(rotateArray.size()==0){
            //printf("no elem in vector");
            return 0;
        }
        for(int i = 0;i< rotateArray.size()-1;i++){
            if(rotateArray[i]>rotateArray[i+1]){

                return rotateArray[i+1];
            }
        }

        return rotateArray[0];
    }
};
剑指offer——旋转数组的最小数字 经典面试题——旋转数组的最小数字 阅读详情

相关推荐

BMS开发避坑指南:如何用ADBMS6815实现0.03%精度的电池采样?

本文深入解析了如何利用ADBMS6815等高精度AFE芯片,在车规级BMS开发中实现0.03%级别的电池电压采样精度。文章从芯片选型、硬件设计、软件配置、算法优化到系统验证,提供了一套完整的实战指南,帮助工程师系统性地提升BMS测量精度,从而保障电池安全、延长寿命并增强产品竞争力。

weixin_28314575的博客 135

【剑指offer】旋转数组的最小值

现在对算法真的是由衷地热爱啊,总是忍不住想要A题(本科都没这意识,哎,把时间都浪费在了考试拿奖学金和所谓的学生工作上了),而且数学一直以来都是自己的强项,希望在这方面以后能应用好,虽然在ACM方面还只是个小学生,以后即使工作了,也要把ACM坚持下去,无关乎工作,只关乎兴趣。 依然是剑指offer上的题目,第8题,在九度OJ上测试通过。

兰亭风雨的专栏 3244

HCLR-Net: 混合对比学习正则化与局部随机扰动用于水下图像增强

独特贡献在于开发了一种处理负样本的新策略,既保留了负样本的统计特性,又防止网络过度剖析这些样本中的特征信息。通过根据每个通道特征的重要性对模型进行加权,我们可以增强富含上下文信息的通道,从而获得更准确、更详细的特征表示。AHA 模块利用垂直方向上的 Avgpool 和水平方向上的 Maxpool 来捕捉远程依赖关系和准确的位置信息,从而有效确定不同方向上的特征退化。对比学习策略通常旨在最小化正样本之间的欧氏距离,使预测图像更接近理想图像,同时最大化负样本与预测图像之间的距离,使它们进一步远离非理想表征。

G-Howe的博客 1459

剑指(旋转数组最小值)

题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 思路: 这个问题的中心思想其实就是使用二分查找的方法,逐步的逼近这个最小值,首先这个旋转数组将一个非递减...

lovezhaohaimig的博客 244

蚁群算法(Ant Colony Optimization,ACO)讲解+代码实现

通常情况下,较优的解对应的路径上的信息素会被加强,而较差解对应的信息素则会减少或蒸发。的化学物质,这种物质会在蚂蚁走过的路径上留下痕迹,后续的蚂蚁会根据这些信息素的浓度来选择路径,从而形成一条从蚁巢到食物源的。在求解TSP蚁群算法中,每只蚂蚁相互独立,用于构造不同的路线,蚂蚁之间通过信息素进行交流,合作求解。的过程,该路段经过的蚂蚁越多,信息素留下的就越多,浓度越高,更多的蚂蚁都会选择这个路段。需要注意的是,蚁群算法是一种。(6)计算每只蚂蚁的总距离:遍历每只蚂蚁的路线,累加经过的城市之间的距离。

m0_73804764的博客 1万+

单细胞分析进阶:sctransform标准化在Seurat中的实战解析

本文深入解析了sctransform标准化方法在Seurat单细胞分析中的实战应用。通过对比传统对数标准化,sctransform能更有效地建模并剔除技术噪音,提升数据质量。文章提供了从环境配置、数据准备、核心参数解析到完整流程整合的详细指南,并针对常见问题给出解决方案,帮助研究者获得更清晰的细胞分群和更可靠的差异表达结果。

weixin_29248313的博客 152

剑指offer:旋转数组的最小数字(Python)

题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 解题思路 思路1 暴力解法:根据给定的数组特点,从左到右遍历数组元素,当首次遇到数组中某个元素比上一个...

种因收果 2808

【PyBind11+anaconda+opencv+windows11+cmake+wsl+vscode】从入门到跑通。构建基于opencv c++的python package

如何安装请详见上文 【PyBind11+anaconda+opencv+windows11+cmake+wsl+vscode】从入门到跑通。构建基于opencv c++的python接口_子韵如初的博客-优快云博客w不需要安装啥x11 、 xming直接mobxterm可以搞定点击右上角的X server打开可视化服务器然后 apt install x11-apps -yxclock 搞定从mobxterm可以看到display的端口X11显示可视化的原理是就是通过X协议,类似于http对linux于w

weixin_43953700的博客 3万+

剑指Offer面试题8(java版):旋转数组的最小数字

题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为旋转。 输入一个递增的排序的数组的一个旋转,输出旋转数组的最小元素。  例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小元素为1. 这道题最直观的解法并不难,从头到尾遍历一次,我们就能找到最小的元素。这种思路的时间复杂度为O(n)。但是这个思路没有利用输入的旋转数组的特性,肯定达不到面试官的要求。 我

D.K专栏 6744

数学建模算法案例精讲500篇-【深度强化学习】深度确定性策略梯度(DDPG)(附MATLAB和python代码实现)

它是一种学习连续动作的无模型策略算法。它结合了DPG(确定性策略梯度)和DQN(深度Q网络)的思想。它利用DQN中的经验重放和延迟更新的目标网络,并基于DPG,可以在连续的动作空间上运行。# 用于生成带有噪声的动作def __init__(self, action_space, mu=0.0, theta = 0.15, max_sigma = 0.3, min_sigma = 0.3, decay_period = 100000):#decay_period要根据迭代次数合理设置# 均值 mu。

qq_36130719的博客 325

爬取B站评论+AI情感分析:Python批量抓数据+BERT正负向分类(全流程)

B站作为年轻群体聚集的内容平台,评论区蕴含海量用户真实态度(如好评、吐槽、中立观点),是情感分析的优质数据源!本文分享完整流程:批量爬取B站视频评论→数据清洗去噪→BERT模型情感分类→可视化分析,基于预训练BERT模型实现高精度正负向判断,新手也能快速复刻情感分析系统! 前置配置(关键!获取B站API访问权限) B站评论通过官方API接口返回,无需复杂解析,只需配置用户Cookie即可正常请求: 2. 完整代码(直接复制运行) 三、使用步骤(5步搞定,新手友好) 步骤1:配置关键参数 打开,在类中修改

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1069

【剑指offer】旋转数组的最小数字

剑指offer:旋转数组中最小数字

子夜的个人博客 1323

【项目解析】2KW 230V 数字逆变器控制系统(二)

【项目解析】 2KW 230V 数字逆变器控制系统(一) 项目的 交流输出电压 并不是单纯一个电压环就能控制好的,而是典型的 双环控制架构:最终占空比控制量会经过计算: 然后写入 单片机 TMM 定时器的比较寄存器 (TMGRA0/TMGRD0/TMGRC1), → 定时器输出互补 PWM, → 驱动 IGBT 全桥, → 经过 LC 滤波形成 230 VAC / 50Hz 的正弦电压。总结交流电压是双环控制的结果:目标/作用:把输出 RMS 电压稳到目标(例如 230 VAC);在母线波动与负载变化下

Naiva的博客 1298

【剑指offer】6-旋转数组中的最小数字

本文系《剑指offer》的刷题记录,通过牛客网在线平台测试通过。 在线测试平台:牛客网 编程资料获取:CodeLab 1-Description 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0...

心之所向,敝履以往 329

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

力扣剑指Offer 第5天 查找算法(中等) 剑指 Offer 04. 二维数组中的查找 剑指 Offer 11. 旋转数组的最小数字 剑指 Offer 50. 第一个只出现一次的字符

力扣剑指Offer 第5天 查找算法(中等) 剑指 Offer 04. 二维数组中的查找 剑指 Offer 11. 旋转数组的最小数字 剑指 Offer 50. 第一个只出现一次的字符 剑指 Offer 04. 二维数组中的查找 题目 在一个n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 示例: 现有矩阵 matrix 如下: [ [1, 4, 7, 11, 15]

Ctrl_kun的博客 4552

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

《剑指offer》算法总结

最近找工作,刷了下《剑指offer》这本书,上面有挺多经典的算法,对每一章做了一个总结,章节笔记见一下链接: http://note.youdao.com/noteshare?id=ad655fcf73eb4b63e7e0700daa01d02f 下面是对整本书的一个算法,从数据结构上进行分类,这样拿到算法题的时候知道从哪一个类别去思考相似的可能性。 一、线性表 1、数组 2、链表 二、字符串 三...

Zuoerfeng 4950

【算法】寻找旋转排序数组中的最小值 & 缺失的数字

当题目中存在有序性或单调性时,就应优先考虑二分查找:例如数组整体有序或局部有序(如旋转数组)、某个条件在区间内呈现“前真后假”或“前假后真”的分界特征、下标与数值存在固定关系(如缺失数字问题),或答案位于一个连续区间且可通过判断函数验证可行性;只要能够通过一次判断就排除一半区间,并且数据规模较大、要求O(logn)复杂度,二分查找就是最合适的解法。

qq_2778465975的博客 900

【leetcode刷题】31.旋转数组的最小数字——Java版

是挺难的,但还没有停下

公号:一条coding 1万+

剑指offer算法题006:旋转数组的最小数字

小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法。考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offer上的算法题,以及小编总结的答案。下面是第006道剑指offer算法题: 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。例如, 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如,数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。

我的博客 302

剑指offer算法题:输出旋转数组中的最小值。

package algorithm; /** * author : fzy * date : 2019/11/12 8:26 * desc : 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 * 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 * 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 */ ...

程序猿 351

【剑指Offer】求旋转数组的最小值

首先介绍下旋转数组: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 例如数组 {3, 4, 5, 1, 2} 为 {1, 2, 3, 4, 5} 的一个旋转。 使用二分查找的思想: 如果a[mid]小于a[high],说明最小值已经移到了mid位置或者mid往左的位置,所以此时最小值在low——mid之间; 反之,说明比较大的数值那一部分还占据着mid以及mi...

ncc1995的博客 321

剑指offer面试题11:旋转数组的最小值

categories: [计算机通识,数据结构与算法,剑指offer系列] thumbnail: /images/fe/offer.jpg toc: true 剑指offer面试题11:旋转数组的最小值 题目: 把一个数组最开始的若干个元素搬到数组的末尾, 我们称之数组的旋转。输入一个递增排序的数组的一个旋转, 输出旋转数组的最小元素。例如数组{3,4, 5, 1, 2 }为{ l1,2,3, ...

u012031958的博客 437

旋转数组中的最小数字——剑指offer11

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。 方法1 暴力 关键点: 1.正常排序的情况下,最小就是第一个; 2.旋转过的,则找出第一个数字小于前一个数字。 从下标为0的元素开始遍历; 每次进行比较,如果当前元素比相邻的下一元素大,则对应的下一个元素即为最小值; 如果遍历到最后一个元素都没有出现过上述情况,则下标为0的元素为最小元素

yangsm的博客 481

旋转数组的最小数字——剑指offer

题目描述: 旋转数组的最小数字 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 示例 1: 输入: [3,4,5,1,2] 返回值: 1 示例 2: 输入:[1,1,1,0,1] 输出:0 题解: 方法一:暴力方法: 直接遍历一遍数组,即可找到最小值。但是本题的附加条件就没有用上。肯定不是面试官所期望的答案。 方法二:二分查找 这种二分查找难就难在,ar

_Y__X_的博客 457

【C/C++练习题】旋转数组的最小数字

《剑指offer》面试题11

本末实验室 744

剑指 Offer 第5天、第6天

剑指 Offer 04. 二维数组中的查找 剑指 Offer 11. 旋转数组的最小数字 剑指 Offer 50. 第一个只出现一次的字符 剑指 Offer 32 - I. 从上到下打印二叉树 I 剑指 Offer 32 - II. 从上到下打印二叉树 II 剑指 Offer 32 - III. 从上到下打印二叉树 III

曾几何时的博客 1052
上一篇: 剑指offer(4) 两个栈实现队列
下一篇: 数据库复习(一)
TestMin
博客等级 码龄11年 0粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值