当前位置: 首页 > news >正文

二分查找------练习1

1. 题目

在这里插入图片描述

2. 思路和题解

这道题和81题其实很像,也是用二分查找进行求解。也是需要在原二分查找的基础上缩减范围。

  1. 首先和二分查找大体思路一样,分别定义左右两个位置left和right,然后mid为left + (right - left) / 2
  2. 接下来就是三种情况:
  • 如果中间值大于右边的值,即numbers[mid] > numbers[right],这个时候说明最小值肯定在mid的右边,所以将mid + 1赋值给left
  • 如果中间值小于右边的值,即numbers[mid] < numbers[right],这个时候说明最小值肯定在mid的左边,但是这里不能像上面一样,将mid - 1赋值给right,因为mid这个位置的元素可能就是最小的,所以不能直接排除,需要先留下来
  • 如果中间值等于右边的值,即numbers[mid] = numbers[right],这个时候虽然没办法像上面一样确定最小值在mid的左边还是右边,但是我们可以将right值减1,这样起到缩小范围的作用,并且没有将mid排除,所以对结果是没有影响的

所以整体的代码如下:

class Solution {
    public int findMin(int[] nums) {
        int left = 0;
        int right = nums.length - 1;
        while (left < right) {
            int mid = left + (right - left) / 2;
            if (nums[mid] > nums[right]) {
                left = mid + 1;
            } else if (nums[mid] < nums[right]) {
                right = mid;
            } else {
                right--;
            }
        }
        return nums[left];
    }
}

相关文章:

  • 使用C++在Qt框架下调用DeepSeek的API接口实现自己的简易桌面小助手
  • mysql5.7及mysql8的一些特性
  • 人工智能(AI)系统化学习路线
  • 在 ASP .NET Core 9.0 中使用 Scalar 创建漂亮的 API 文档
  • 干货!三步搞定 DeepSeek 接入 Siri
  • 给语言模型增加知识逻辑校验智能,识别网络信息增量的垃圾模式
  • 对立统一规律揭示的核心内容
  • AI-Talk开发板之更换串口引脚
  • 算法题(104):数的划分
  • Vue.js 应用的入口文件
  • STM32F103C8T6 -MINI核心板
  • C# SolidWorks 二次开发 -各种菜单命令增加方式
  • 建筑安全员考试:“知识拓展” 关键词驱动的深度备考攻略
  • 物理环境与安全
  • 说说Vue 3.0中Treeshaking特性?举例说明一下?
  • 多线程synchronized——线程“八锁”
  • 数据通信学习笔记之OSPF其他内容1
  • 精益架构设计:深入理解与实践 C# 中的单一职责原则
  • 单播、广播、组播和任播
  • 浔川社团官方联合会维权成功
  • 上海市国防动员办公室副主任吴斌接受审查调查
  • 日本航空自卫队一架练习机在爱知县坠毁
  • 首个偏头痛急性治疗药物可缓解前期症状
  • 王毅谈中拉论坛十年成果
  • 美国政府信用卡被设1美元限额,10美元采购花一两小时填表
  • 中国科学院院士徐春明不再担任山东石油化工学院校长