leetcode 153. 寻找旋转排序数组中的最小值(优质解法)

代码:

class Solution {
    public int findMin(int[] nums) {
        int left=0,right=nums.length-1;
        int refer=nums[right];

        while (left<right){
            int mid=left+(right-left)/2;

            if(nums[mid]>refer){
                left=mid+1;
            }else {
                right=mid;
            }
        }

        return nums[left];
    }
}

题解:

        通过题意我们知道,传入的参数是经过旋转的递增数组,如 3,4,5,1,2,就是通过 1,2,3,4,5 旋转得到的,而这种旋转数组的特性我们可以通过一张图清晰的看出来,以 3,4,5,1,2 为例


        我们可以看出旋转以后的递增数组大多呈现这样的结构,我们将数据分为了两个区间,而需要获取的答案位于下面区间的左边界

        我们可以以数组的最后一个数据作为 refer 参照,在数组中选取一个数 nums[ i ],这个数可能会位于上面和下面两个区间

        (1).当 nums[ i ] > refer 时,说明该数位于上面的区间,那我们就可以大胆去除掉 i 下标指向的数据以及左边的数据

        (2).当 nums[ i ] <= refer 时,说明该数位于下面的区间,那我们就可以大胆去除掉 i 下标右边的数据(但我们不能确定 i 下标指向的是否刚好是我们需要的数据,所以我们不能去除掉 i 下标指向的数据)

        通过上面的分析,我们已经能够确定,该题目具有二段性,所以我们可以通过二分法来解决该问题

        以 nums = 3,4,5,1,2 为例,用 L 和 R 指针指向数组的两端,mid = left+(right-left)/2= 2 .此时 R 指针指向的刚好是数组的最后一个数据,我们可以顺便记录起来,作为参照值,refer = nums[ R ] = 2

        此时 nums[ mid ] = 5 > refer,所以在上面的区间,我们就可以大胆去除 mid 指针以及 mid 指针左边的数据,让 L = mid+1

3        4        5        1        2

L                 mid               R

        计算中间值 mid = 3,此时 nums[ mid ] = 1 < refer, 所以在下面的区间,我们就可以大胆去除 mid 右边的数据,让 R =mid 

3        4        5        1        2

                               L       R

                              mid 

        当 L 和 R 指针相遇时,我们便找到了下面区间的左边界,直接返回 nums[ L ] 即可

3        4        5        1        2

                               L       

                               R

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

利用tf-idf对特征进行提取

TF-IDF是一种文本特征提取的方法&#xff0c;用于评估一个词在一组文档中的重要性。 一、代码 from sklearn.feature_extraction.text import TfidfVectorizer import numpy as npdef print_tfidf_words(documents):"""打印TF-IDF矩阵中每个文档中非零值对应…

单片机的各个通信协议的波特率

下面是一些常见的波特率数值&#xff0c;这些波特率通常被用于串口通信&#xff0c;SPI、I2C、CAN等接口的实际波特率可能有所不同&#xff1a; USART: 110 bps 300 bps 600 bps 1200 bps 2400 bps 4800 bps 9600 bps 14400 bps 19200 bps 38400 bps 56000 bps 57600 bps 11520…

一文掌握Spring Boot热部署技巧,告别频繁重启!

频繁地重启应用&#xff0c;导致开发效率降低&#xff0c;加班随之而来。有没有什么办法&#xff0c;能让 Spring Boot 项目热部署呢&#xff0c;从而不用每次都手点。答案是肯定的。 第一步&#xff1a;添加 spring-boot-devtools 依赖 Spring Boot 提供了 spring-boot-devt…

Apple Find My「查找」认证芯片找哪家,认准伦茨科技ST17H6x芯片

深圳市伦茨科技有限公司&#xff08;以下简称“伦茨科技”&#xff09;发布ST17H6x Soc平台。成为继Nordic之后全球第二家取得Apple Find My「查找」认证的芯片厂家&#xff0c;该平台提供可通过Apple Find My认证的Apple查找&#xff08;Find My&#xff09;功能集成解决方案。…

2-2基础算法-Nim和/前缀和/差分

文章目录 一.Nim和二.前缀和&区间和三.差分 一.Nim和 Nim游戏是一个数学策略游戏&#xff0c;通常涉及两名玩家轮流从几堆物品&#xff08;如石子或饼干&#xff09;中取走一定数量的物品。每个玩家每次可以从任意一堆中取走任意数量的物品&#xff0c;但必须至少取走一个…

使用Pytorch从零开始构建StyleGAN

本文介绍的是当今最好的 GAN 之一&#xff0c;来自论文《A Style-Based Generator Architecture for Generative Adversarial Networks》的 StyleGAN &#xff0c;我们将使用 PyTorch 对其进行干净、简单且可读的实现&#xff0c;并尝试尽可能接近原始论文。 如果您没有阅读过…

设计模式(二)-创建者模式(5)-建造者模式

一、为何需要建造者模式&#xff08;Builder&#xff09;? 在软件系统中&#xff0c;会存在一个复杂的对象&#xff0c;复杂在于该对象包含了很多不同的功能模块。该对象里的各个部分都是按照一定的算法组合起来的。 为了要使得复杂对象里的各个部分的独立性&#xff0c;以及…

一篇文章讲透TCP/IP协议

1 OSI 7层参考模型 2 实操连接百度 nc连接百度2次&#xff0c;使用命令netstat -natp查看就会重新连接一次百度 请求百度 3 三次握手、socket 应用层协议控制长连接和短连接 应用层协议->传输控制层&#xff08;TCP UDP&#xff09;->TCP&#xff08; 面向连接&am…

02-MQ入门之RabbitMQ简单概念说明

二&#xff1a;RabbitMQ 介绍 1.RabbitMQ的概念 RabbitMQ 是一个消息中间件&#xff1a;它接受并转发消息。你可以把它当做一个快递站点&#xff0c;当你要发送一个包裹时&#xff0c;你把你的包裹放到快递站&#xff0c;快递员最终会把你的快递送到收件人那里&#xff0c;按…

Linux-----5、文件系统

# 文件系统 # 终端的基本操作 ㈠ 打开多个终端 ㈡ 快速清屏 新建标签&#xff1a;command T 新建窗口&#xff1a;command N 关闭标签&#xff1a;command Q 关闭窗口&#xff1a;command W 放大&#xff1a;command 缩小&#xff1a;command - 清屏&#xff…

【XR806开发板试用】+2.鸿蒙内核

非常感谢基于安谋科技STAR-MC1的全志XR806 Wi-FiBLE开源鸿蒙开发板试用活动&#xff01;非常感谢极术社区&#xff01;非常感谢极术小姐姐&#xff01;非常感谢全志在线开发者社区&#xff01;非常感谢通过试用申请&#xff01;非常感谢安谋科技&#xff01; 接上一篇&#xff…

[C++] 虚函数、纯虚函数和虚析构(virtual)

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/weixin_43197380&#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;本文由 Loewen丶原创&#xff0c;首发于 CSDN&#xff0c;转载注明出处&#x1f649;&…

解决nuxt3引入图片报错:ReferenceError: require is not defined

现象&#xff1a; 原因&#xff1a;在nuxt3中不支持require的方式引入图片/文件等静态资源。 解决办法&#xff1a; 1. 直接在img标签中的src属性里写明图片的路径&#xff0c;但是此时src前面不能有冒号做动态绑定&#xff01;&#xff1a; src"/assets/images/loading…

Tekton 基于 gitlab 触发流水线

Tekton 基于 gitlab 触发流水线 Tekton EventListener 在8080端口监听事件&#xff0c;Gitlab 提交代码产生push 事件&#xff0c;gitlab webhook触发tekton流水线执行。 前置要求&#xff1a; kubernetes集群中已部署 tekton pipeline、tekton triggers以及tekton dashboa…

CSS特效030:日蚀动画

CSS常用示例100专栏目录 本专栏记录的是经常使用的CSS示例与技巧&#xff0c;主要包含CSS布局&#xff0c;CSS特效&#xff0c;CSS花边信息三部分内容。其中CSS布局主要是列出一些常用的CSS布局信息点&#xff0c;CSS特效主要是一些动画示例&#xff0c;CSS花边是描述了一些CSS…

Amazon CodeWhisperer:AI 编程助手

文章作者&#xff1a;prigioni 1. 什么是 Amazon CodeWhisperer&#xff1f; Amazon CodeWhisperer 能够理解以自然语言&#xff08;英语&#xff09;编写的注释&#xff0c;并能实时生成多条代码建议&#xff0c;以此提高开发人员生产力。该服务可以直接在集成开发环境&#…

C# URL参数编码

string s "lw123abc测试信息&#xff01;#&#xffe5;%……&*&#xff08;&#xff09;——"; Console.WriteLine("原数据:\t\t" s); String s2 Uri.EscapeDataString(s);//Uri.EscapeDataString() 编码 Console.WriteLine("Hexdata:\t&qu…

spring 笔记五 SpringMVC的数据响应

文章目录 SpringMVC的数据响应SpringMVC的数据响应方式回写数据 SpringMVC的数据响应 SpringMVC的数据响应方式 页面跳转 直接返回字符串通过ModelAndView对象返回 回写数据 直接返回字符串返回对象或集合 返回字符串形式 直接返回字符串&#xff1a;此种方式会将返回的字符…

风速预测(四)基于Pytorch的EMD-Transformer模型

目录 前言 1 风速数据EMD分解与可视化 1.1 导入数据 1.2 EMD分解 2 数据集制作与预处理 2.1 先划分数据集&#xff0c;按照8&#xff1a;2划分训练集和测试集 2.2 设置滑动窗口大小为7&#xff0c;制作数据集 3 基于Pytorch的EMD-Transformer模型预测 3.1 数据加载&am…

2024 年 值得收藏的10 款顶级 Windows 数据恢复软件

您是否需要并搜索过某个文件或文件夹&#xff0c;却发现您最近不小心删除了它&#xff1f;或者更糟糕的是&#xff0c;您不知道文件/文件夹发生了什么&#xff0c;因为由于某种原因&#xff0c;它从您的驱动器中消失了&#xff1f;这些事情会造成伤害并且可能令人沮丧&#xff…