博客
关于我
剑指 Offer 11. 旋转数组的最小数字
阅读量:639 次
发布时间:2019-03-15

本文共 1349 字,大约阅读时间需要 4 分钟。

数组最小值查找方法

在编程中,寻找数组中的最小值是一个常见的问题。以下是两种常用的解决方案,分别针对不同的场景进行优化。

方法一:倒序顺序遍历

思想

该算法的基本思路是从数组末尾开始逆向遍历,依次比较当前元素与其前一个元素的值。如果发现前一个元素大于当前元素,则当前元素即为最小值。如果遍历过程中没有找到更小的元素,则第一个元素即为最小值。

代码实现

public class Solution {   public:     int minArray(vector
&numbers) { for (int i = numbers.size()-1; i > 0; --i) { if (numbers[i-1] > numbers[i]) { return numbers[i]; } } return numbers[0]; }}

方法二:二分查找

思想

利用二分查找的原理,通过不断缩小查找范围来确定最小值的位置。具体逻辑如下:

  • 如果 nums[mid] 等于 nums[right],则最小值的位置可能在 mid 左侧,同时由于 nums[right]nums[mid] 的值相同,这种情况下继续缩小右边的范围,即 right -= 1
  • 如果 nums[mid] > nums[right],则最小值的位置位于 mid 右侧,即 left = mid + 1
  • 如果 nums[mid] < nums[right],则最小值的位置位于 mid 左侧,即 right = mid
  • 代码实现

    public class Solution {   public:     int minArray(vector
    &numbers) { int left = 0, right = numbers.size() - 1, mid; while (left < right) { mid = (left + right) / 2; if (numbers[mid] == numbers[right]) { --right; } else if (numbers[mid] > numbers[right]) { left = mid + 1; } else { right = mid; } } return numbers[left]; }}

    注意事项

    • 倒序遍历法 的时间复杂度为 O(n),由于只需遍历数组一次,非常适合用于处理较短数组或数组中只有部分元素需要比较的情况。
    • 二分查找法 的时间复杂度为 O(log n),这使得它在处理较大的数组时具有明显优势,尤其是在数据量呈指数级增长时,二分查找法的性能优势更加明显。

    选择哪种方法取决于具体的应用场景。

    转载地址:http://orzmz.baihongyu.com/

    你可能感兴趣的文章
    获取linux 主机cpu类型
    查看>>
    测试tensorflow是否安装成功 出现 SyntaxError: invalid syntax的错误
    查看>>
    Flask--简介
    查看>>
    16 python基础-恺撒密码
    查看>>
    Frame--Api框架
    查看>>
    Boostrap技能点整理之【网格系统】
    查看>>
    javaWeb服务详解(含源代码,测试通过,注释) ——Emp的Dao层
    查看>>
    ssm(Spring+Spring mvc+mybatis)——updateDept.jsp
    查看>>
    Git简单理解与使用
    查看>>
    echarts 基本图表开发小结
    查看>>
    adb通过USB或wifi连接手机
    查看>>
    JDK9-15新特性
    查看>>
    TreeSet、TreeMap
    查看>>
    JVM内存模型
    查看>>
    可变长度参数
    查看>>
    3、条件查询
    查看>>
    cordova打包apk更改图标
    查看>>
    GitHub上传时,项目在已有文档时直接push出现错误解决方案
    查看>>
    文件系统的层次结构
    查看>>
    减少磁盘延迟时间的方法
    查看>>