当前位置: 首页 > 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];
    }
};

相关文章:

  • 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问题
  • “老中青少”四代同堂,季春艳携锡剧《玲珑女》冲击梅花奖
  • 4台肺癌手术,2名“90后”患者,这届年轻人的肺怎么了?
  • 人民日报钟声:通过平等对话协商解决分歧的重要一步
  • 普京提议无条件重启俄乌谈判,外交部:我们支持一切致力于和平的努力
  • 不到1小时就能速发证件?央媒曝光健康证办理乱象
  • 法院就“行人相撞案”道歉:执法公正,普法莫拉开“距离”