Rhyme/剑指Offer06 Java 旋转数组找最小值

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

剑指Offer06 Java 旋转数组找最小值

package offer6;

/**
 * 把一个数组最开始的若干个元素搬到数组的末尾,
 * 我们称之为数组的旋转。
 * 输入一个非递减排序的数组的一个旋转,
 * 输出旋转数组的最小元素。
 * 例如:数组{3,4,5,1,2}是{1,2,3,4,5}的一个旋转
 * 该数组的最小值为1
 * 求出旋转数组中的最小值
 * <p>
 * 思路:
 * <p>
 * 采用二分法的查找思想
 * <p>
 * 先确定该数组的一个mid中间索引值
 * <p>
 * 如果该中间值的右边比该中间值要小,则继续在右边二分查找
 * 否则在该中间值的左边进行二分查找
 * 当该中间值的左右两边都要比中间值大的时候,
 * 我们就找到了该旋转数组的最小值
 *
 * @author RhymeChiang
 * @date 2018/01/15
 **/
public class Offer6 {

    /**
     * 寻找旋转数组中的最小值
     *
     * @param array
     * @return
     */
    public static int findSmallest(int[] array) {
        // 数组为空
        if (array.length < 1) {
            return -1;
        }

        // 数组长度为1
        if (array.length == 1) {
            return array[0];
        }

        // 数组中只有两个元素
        if (array.length == 2) {
            return array[1];
        }

        int left = 0;
        int right = array.length - 1;
        int mid;
        int midValue;
        int midLeftValue;
        int midRightValue;
        while (left <= right) {
            mid = (left + right) / 2;
            midValue = array[mid];
            midLeftValue = array[mid - 1];
            midRightValue = array[mid + 1];
            // 找到最小值
            if (midValue <= midLeftValue && midValue <= midRightValue) {
                return midValue;
            }
            // 继续在左边二分查找
            if (midValue > midLeftValue) {
                right = mid;
            } else {
                left = mid + 1;
            }
        }
        return -1;
    }

    public static void main(String[] args) {

        int []array = new int[]{6,7,8,1,2,3,4,5};

        System.out.println(findSmallest(array));
    }

}

测试结果:

这里写图片描述

旋转数组的最小值(二分法) 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 题目分析 根据题目,非减排序意思就是相邻两元素中左边元素时小于等于右边的,关... 阅读详情

相关推荐

飞行器坐标转换

本文定义的是右手直角坐标系,x−y−zx-y-zx−y−z轴分别为北-天-东。从AAA坐标系到BBB坐标系是分别绕y−z−xy-z-xy−z−x轴,即天-东-北旋转ψ−θ−γψ−θ−γ。如果AAA是惯性系,BBB是机体系,则这三个角度分别为偏航角、俯仰角、横滚角。图1 惯性系到机体系。

gongfuyd的博客 1356

java旋转数组最小值_旋转数组的最小数字

532推荐思路剑指Offer中查看全部编辑于 2015-08-18 23:34:39回复(140)703采用二分法解答这个问题,mid = low + (high - low)/2需要考虑三种情况:(1)array[mid] > array[high]:出现这种情况的array类似[3,4,5,6,0,1,2],此时最小数字一定在mid的右边。low = mid + 1(2)array[m...

weixin_29957793的博客 358

STM32Cubemx-H7-17-麦克纳姆轮驱动

我们先看.h,知道哪些函数会有哪些功能和宏定义参数首先 是在.h的宏定义处定义引脚编号,比如tb6612控制方向的引脚,以及设定了哪个定时器作为pwm输出,还有编码计次的中断引脚/* 硬件相关宏定义 *//*1 前进方向往上 42 3*/// TB6612 方向引脚定义/* 定时器相关宏定义 *//* 编码器相关宏定义 */把自己的引脚根据原理图填对应,方向引脚也是,如果发现反转就把对应的引脚定义反过来,编码也是,编码我们用一个引脚就好,都在cubemx配置好。

m0_74211379的博客 1423

旋转数组中的最小数字 java

旋转数组中的最小数字 java 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 代码1: import java.util.ArrayList; publ...

柳絮 677

IPD实战指南:如何运用SPAN模型精准定位高潜力市场并优化资源配置

本文是IPD实战指南,详细解析了如何运用SPAN模型进行市场分析与战略决策。文章通过四步实战法,指导企业科学定义细分市场、量化评估吸引力与竞争力,并绘制矩阵以制定精准的资源配置策略,从而跳出红海竞争,将资源聚焦于高潜力市场。

weixin_29306317的博客 75

zemax混合式非序列模拟

注意不要点击左侧的非序列模式,那个时纯粹的非序列,会清除序列模式的数据。第2、4、6透镜材质为空气,是为了让光线进入到多重透镜内部。这时普通的优化方式会失败。平行光束经过多焦透镜时,会汇聚在不同焦距处。所以还需要控制能量的大小,进行优化。接下来用非序列模式设计一个多焦透镜。像面的孔径为圆形通光孔:0-1.2。透镜不同位置处有不同的聚焦位置。透镜的z轴位置相同,重合。

fendoudecheng的博客 3068

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

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

D.K专栏 6744

Dify工作流实践—根据word需求文档编写测试用例到Excel中

文章介绍了用dify工作流实现从word需求文档到测试用例写入excel的详细落地过程

weixin_42476668的博客 5335

【编程题】旋转数组的最小值(Java实现)

【编程题】旋转数组的最小值(Java实现) 题目来源 剑指offer第六题 https://www.nowcoder.com/practice/9f3231a991af4f55b95579b44b7a01ba?tpId=13&tqId=11159&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/ques...

qq_40432108的博客 521

NeurIPS‘25新研究!PINN+GNN强强联手,模型精度飙升50%!

物理图神经网络研究取得重大进展!UCLA团队提出的PhysGNN架构在NeurIPS'2025上引发关注,该模型成功融合PINN的物理约束优势与GNN的图结构处理能力,解决了工程仿真中的关键瓶颈。研究显示,PhysGNN在城市热网预测中误差降低42%,电网负荷模拟的物理规则违反率下降68%。同步解析的SyncTREE模型则创新性地将RC树物理特性融入GNN,实现毫秒级IC时序分析;HSPGNN模型通过嵌入偏微分方程,显著提升多变量时间序列填补精度。

m0_73122726的博客 1023

2026年全国青少年信息素养大赛算法应用主题赛(C++赛项初赛模拟卷1及答案解析)

2026年全国青少年信息素养大赛算法应用主题赛(C++赛项初赛模拟卷1及答案解析)

王老师青少年编程 2025

剑指offer旋转数组最小值java

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 方法 直接遍历,找到最小值。 从前往后找,同时从后往前找 二分查找。 import java.util...

weixin_44019182的博客 992

17、激光切割质量影响因素及优化研究

本文研究了激光切割过程中焦点位置、入射角、激光功率、切割速度和气体压力等因素对切割质量的影响,采用响应面方法(RSM)和Box-Behnken设计,基于三种不同喷嘴对SS 304不锈钢进行实验。通过建立切缝宽度比和条纹深度的回归模型,并结合方差分析验证模型有效性,深入分析各参数对切割质量的影响机制。研究发现喷嘴结构差异显著影响参数作用趋势,尤其在切割速度和气体压力响应上表现明显。最终通过多目标优化确定最小激光功率、适中切割速度和最大气体压力为最优组合,显著提升切割质量,为实际生产提供了理论依据和技术支持。未

grape的博客 132

java旋转数组最小值_旋转数组找最小值 | 学步园

问题:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转,输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素,例如数组{3,4,5,1,2}为数组{1,2,3,4,5}的一个旋转,该数组的最小值为1。解题思路:一个递增数组经旋转后分为两部分,它们都是递增的数组,第一个子数组的第一个元素不小于第二个子数组的最后一个元素,我们要寻找的是第一个子数组最后一个元素的下一个元素或第二个子...

weixin_35078549的博客 299

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

JAVA: 旋转数组的最小值

题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。分析: 考察二分查找。旋转之后的数组实际上可以划分成两个有序的子数组:前面子数组的大小都大于后面子数组中的元素。注意...

HxxxxxxU的博客 584

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

查找旋转数组的最小数字 JAVA实现

题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 题目解析 这其实是一个查找问题,查找最小元素,如果单纯遍历一边数组确实也可以查找到这个最小数字

学习学习再学习 1335

java旋转数组最小值_旋转数组的最小值

问题把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个排好序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1。思路这道题最直观的解法并不难。从头到尾遍历数组一次,就能找出最小的元素,时间复杂度显然是O(n)。但这个思路没有利用输入数组的特性。既然有时间复杂度更小的算法,我们容易想到...

weixin_33186486的博客 275

旋转数组的最小数字(Java)

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

Sweet Baby,甜宝 1416

Java求旋转数组的最小值

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。可以借助二分查找法的思想。/** * @author 16026 * */ public class Min {

wangzhen的博客 503

Rhyme/Java 算法 动态规划实现斐波那契

Java 算法 动态规划实现斐波那契

RhymeChiang 1025

Rhyme/冥运算(分治策略)Java版

冥运算(分治策略)Java版算法原理举个例子我们求 X62=(X31)2{X^{62}} =(X^{31})^2 X31=(X15)2X{X^{31}} =(X^{15})^2X X15=(X7)2X{X^{15}} =(X^{7})^2X X7=(X3)2X{X^{7}} =(X^{3})^2X

RhymeChiang 1005

Rhyme/剑指Offer 8 Java 算法 青蛙跳台阶 斐波那契数列

剑指Offer 8 Java 算法 青蛙跳台阶 斐波那契数列 package offer8; /** * 一只青蛙一次可以跳上1级台阶,也可以跳上2级 * 求该青蛙跳上一个n级台阶总共有多少种跳法 * * 我们用f(n) 表示跳上n级台阶的可以有的跳法 * * 假设我们一开始跳得是1级台阶,那么还剩下f(n-1) * * 假设我们一开始跳得是2级台阶,那么还剩下f(n-2

RhymeChiang 628

Rhyme/欧几里得算法 计算最大公因数 Java版

欧几里得算法 计算最大公因数 Java版时间复杂度分析根据定理 如果M>N,则M mod N < M/2,所以迭代次数为2logN所以 T(N) = O(logN)

RhymeChiang 557

Rhyme/剑指Offer Java05 拓展 用两个队列实现一个栈的push和pop操作

剑指Offer Java05 拓展 用两个队列实现一个栈的push和pop操作 package offer5.extend; import offer5.Offer5; import java.util.LinkedList; import java.util.Queue; /** * 用两个队列实现一个栈的push和pop操作 * * 思路: * * 有两个队列A、B

RhymeChiang 553

Rhyme/算法之简单版桶排序

算法之简单版桶排序1、原理讲解桶排序可以这样理解,例如我们要对0-100范围之内的数进行排序,那么我们首先准备101只桶,并将这些桶从0-100分别编上号。准备好了桶,现在我有 50 4 18 18 37这一组数据,现在开始排序,首先是数字50,那么我们就将50放入编号为50的桶内,4放入编号为4的桶内,18放入编号为18的桶,18继续放入编号为18的桶,37放入编号为37的桶。最后的结果是编号4的

RhymeChiang 543

Rhyme/最大子序列和(分治策略)Java版

最大子序列和(分支策略)Java版算法思想:我们采用分支策略,不断的将问题二分,这个时候最大和子序列分别可能存在三个地方,一个是左边的最大和序列,一个是右边的最大和子序列,还有一个是中间部分的最大和子序列。 算法时间复杂度分析T(N) = 2T(N/2)+N使用主分析法可得T(N) = O(nlogn)

RhymeChiang 539
上一篇: Rhyme/剑指Offer Java05 拓展 用两个队列实现一个栈的push和pop操作
下一篇: Rhyme/查找树ADT-二叉查找树的简单模拟Java版
Boen..
博客等级 码龄10年 27粉丝 213原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值