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

剑指Offer11 -- 二分

1. 题目描述

元素可重复的旋转数组的最小值



2. 思路

ref
对二分的奇怪知识增加了!
需要注意的一点是,由于我们在二分过程中改变了 r r r 的位置,因此不能一直使用预先存放的 n u m s [ r ] nums[r] nums[r]



3. 代码

/*
    本题与 153 题的区别在于,有重复元素
    如果有重复元素,我们就无法确定左右区间
    也就无法二分了 😭
    但是事实真的是这样吗?
    事实上,如果我们遇到了边界情况,即:
    nums[mid] == last(nums[n-1])
    我们可以直接“删掉末尾元素”,这不会对答案求解有影响,因为此时有两种情况
    1. last是最小值,那么 nums[mid] 也是最小值,删去也无妨
    2. last不是最小值,此时删去当然无影响
    如果last是最小值,那么 nums[mid] 也是最小值
*/
class Solution {
public:
    int minArray(vector<int>& nums) {
        int l = 0, r = nums.size() - 1;
        // int last = nums[r]; // 错误!!!!我们的last是动态变化的
        while(l < r) {
            int mid = l + r >> 1;
            if(nums[mid] == nums[r])   r -- ;  // 删掉,神来一笔!
            else if(nums[mid] > nums[r])   l = mid + 1; // left
            else    r = mid;    // right
        }
        return nums[l];
    }
};
http://www.dtcms.com/a/97330.html

相关文章:

  • kotlin,jetpack compose 最简导航(navigation)案例学习
  • 1.2-WAF\CDN\OSS\反向代理\负载均衡
  • AI数据分析:一键生成数据分析维度
  • boost.asio
  • 在 i.MX8MP 上用 C++ 调用豆包 AI 大模型实现图像问答
  • 东方通TongHttpServer报错403
  • RFID技术在机器人中的核心应用场景及技术实现
  • Reactive编程:什么是Reactive编程?Reactive编程思想
  • git中feature跟hotfix是什么意思
  • VSCode:Linux下安装使用
  • 区块链知识点知识点3
  • MybatisPlus(SpringBoot版)学习第六讲:插件(分页插件乐观锁)
  • dom0-kernel: /thermal-zones/soc_max/cooling-maps/map0: could not find phandle 2
  • (C语言)指针运算 习题练习1.2(压轴难题)
  • kali利用msf渗透Windows电脑测试
  • 《Keras 3 :AI 使用图神经网络和 LSTM 进行交通流量预测》
  • 数据结构之多项式相加的链表实现
  • PHP文件的导出和导入
  • 蓝桥杯省模拟赛 01串个数
  • 攻破tensorflow,勇创最佳agent(1)---学习率learning_rate问题
  • 【云服务器】在 Linux(Ubuntu / CentOS 7)上快速搭建我的世界 Minecraft 服务器,并实现远程联机,详细教程
  • 笔记:代码随想录算法训练营day62:108.冗余连接、109.冗余连接II
  • MybatisPlus(SpringBoot版)学习第四讲:常用注解
  • PHP MySQL 预处理语句
  • leetcode240.搜索二维矩阵||
  • udp通信(一)
  • VUE3+TypeScript项目,使用html2Canvas+jspdf生成PDF并实现--分页--页眉--页尾
  • 使用LLaMAFactory微调Qwen大模型
  • QT计算器开发
  • kubesphere 终端shell连不上的问题