博客
关于我
剑指 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/

    你可能感兴趣的文章
    [日常] PHP与Mysql测试kill慢查询并检验PDO的错误模式
    查看>>
    [日常] Go语言圣经-并发的非阻塞缓存
    查看>>
    [PHP] 工厂模式的日常使用
    查看>>
    [PHP] 控制反转依赖注入的日常使用
    查看>>
    [PHP] try catch在日常中的使用
    查看>>
    [Linux] 进程间通信
    查看>>
    [PHP] error_reporting(0)可以屏蔽Fatal error错误
    查看>>
    [PHP] 解决php中上传大文件的错误
    查看>>
    [Linux] 使用awk比较两个文件的内容
    查看>>
    [Git] 彻底删除github上的某个文件以及他的提交历史
    查看>>
    [Go] gin框架渲染html字符串
    查看>>
    [js] js中的闭包以及特点
    查看>>
    [操作系统]内存连续分配管理方式
    查看>>
    [Go] json.Unmarshal()解析后存储的结构体定义
    查看>>
    [PHP]PHP不支持方法重载和只支持方法覆盖
    查看>>
    [Go] 获取Go二进制文件的真正执行路径os.Args
    查看>>
    java Map
    查看>>
    scala Tuple入门到熟悉
    查看>>
    RDD partitioner入门详解
    查看>>
    presto查询报错
    查看>>