二分查找(二)

2.练习题

3)

力扣icon-default.png?t=N2N8https://leetcode.cn/problems/search-in-rotated-sorted-array-ii/这题需要分三种情况,第一种是区间有序,正常二分查找,第二种是区间 被旋转,左区间的值大于右区间,需要比较目标值和左区间起始值的大小,来判断选择哪一个区间,第三种是无法区分左区间大还是右区间大,此时[left]==[right],可以直接进行left++或者right--来跳过该值。

代码:

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

        return false;
    }
};

4)力扣icon-default.png?t=N2N8https://leetcode.cn/problems/find-minimum-in-rotated-sorted-array-ii/

这题与上一道题类似,也是分析旋转数组可能的情况,找出目标值。

我一开始的思路是继续对数组分类,有序,已旋转,无法区分三类,代码如下:

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

可以通过测试,就是代码看起来不够简洁,于是修改了一下,只比较中间值与结束值[right],代码如下:

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

用时确实更短了

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/7630.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器视觉行业公司2023今年最大的特点-老员工真香现象出现,事出反常必有妖

老员工真香现象出现&#xff0c;事出反常必有妖。-老人涨薪&#xff0c;新人不招或降薪&#xff0c;工作2-3年最值得跳槽&#xff0c;培训后好找工作。 你可能看到以上现象很反感&#xff0c;但是现在机器视觉行业环境就是这个样子的。 今年机器视觉行业最大的特点就是项目技术…

Atlassian Server用户新选择 | 迁移到数据中心版前,您需要做这些准备(2)

2024年2月&#xff0c;也就是一年不到&#xff0c;Atlassian将终止对Server产品及插件的所有支持。 此公告发布后&#xff0c;许多用户需要了解怎样的前进方向才是最适合企业的。为此&#xff0c;Atlassian不仅提供云版&#xff0c;还提供了本地部署的数据中心&#xff08;Data…

排序算法之希尔排序

&#x1f4dd;个人主页&#xff1a;爱吃炫迈 &#x1f48c;系列专栏&#xff1a;数据结构与算法 &#x1f9d1;‍&#x1f4bb;座右铭&#xff1a;快给我点赞赞&#x1f497; 文章目录1. 希尔排序2. 算法思路3. 算法实现4. 算法性能分析&#x1f49e;总结&#x1f49e;1. 希尔排…

帆软FineReport学习篇(一)

帆软FineReport学习篇(一) 1 FineReport 11版下载 1.1 进入下载官网 fineReport 11版本下载链接 1.2 选择合适的版本,点击下载即可 2 解决问题的途径 2.1 社区搜索 2.1.1 进入社区官网 社区官网 2.1.2 输入搜索内容,点击搜索 1.1.3 选择你所需要的答案,建议优先点击官方…

易基因-单细胞甲基化测序单细胞转录组测序

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 易基因单细胞甲基化测序&单细胞转录组测序 高通量单细胞DNA甲基化测序简介 单细胞DNA甲基化组学研究很大程度上受制于建库技术&#xff0c;传统的文库构建方法或类似于基因组DNA的单…

【Python】1分钟就能制作精美的框架图?太棒啦

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、准备二、基本使用与例子1.初始化与导出2.节点类型3.集群块4.自定义线的颜色与属性总结前言 Diagrams 是一个基于Python绘制云系统架构的模块&#xff0c;它能…

使用Pytorch实现对比学习SimCLR 进行自监督预训练

SimCLR&#xff08;Simple Framework for Contrastive Learning of Representations&#xff09;是一种学习图像表示的自监督技术。 与传统的监督学习方法不同&#xff0c;SimCLR 不依赖标记数据来学习有用的表示。 它利用对比学习框架来学习一组有用的特征&#xff0c;这些特征…

linux 匿名管道 pipe

专栏内容&#xff1a;linux下并发编程个人主页&#xff1a;我的主页座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物&#xff0e;目录 前言 概述 原理介绍 接口说明 pipe 与 fifo的区别 代码演示 结尾 前言 本专栏主…

【K8S系列】深入解析无状态服务

目录 序言 1. 无服务介绍 1.1 优点 1.2 使用场景 1.3 资源类型 1.4 总结 2 使用介绍 2.1 Deployment 使用场景&#xff1a; 2.2 ReplicaSet 使用场景 2.3 pod Pod 资源定义示例 2.4 service 创建一个Deployment&#xff1a; 创建一个Service&#xff1a; 总结…

ChatGPT,让程序员从一片黑暗森林奔向另一片黑暗森林!

几年前看过一个电影&#xff0c;叫做《隐藏人物》&#xff0c;主要讲三位女性在NASA工作时反抗“种族歧视”和“性别歧视”的故事&#xff0c;其中有个情节让我印象极其深刻&#xff1a;NASA计算部门有一群女生&#xff0c;她们的工作是计算飞船轨道&#xff0c;纯手工计算。某…

【算法基础】(一)基础算法 --- 离散化

✨个人主页&#xff1a;bit me ✨当前专栏&#xff1a;算法基础 &#x1f525;专栏简介&#xff1a;该专栏主要更新一些基础算法题&#xff0c;有参加蓝桥杯等算法题竞赛或者正在刷题的铁汁们可以关注一下&#xff0c;互相监督打卡学习 &#x1f339; &#x1f339; &#x1f3…

软件测试,自学3个月出来就是高薪工作?你以为还是2019年以前?

朋友&#xff0c;作为一个曾经从机械转行到IT的行业的过来人&#xff0c;已在IT行业工作4年&#xff0c;分享一下我的经验&#xff0c;供你参考。 讲真&#xff0c;现在想通过培训班培训几个月就进入IT行业&#xff0c;越来越来难了&#xff1b;如果是在2018年以前&#xff0c;…

Spark 算子

目录 什么是Spark rdd算子 算子的分类 Transformation算子 Action算子 转换算子 Value类型 map mapPartitions mapPartitionsWithIndex glom groupBy filter sample distinct coalesce sortBy 双Value类型 intersection union subtract zip K-V类型 par…

【Java基础】-【SpringMVC】

目录什么是MVC&#xff1f;DAO层是做什么的&#xff1f;Spring MVC的执行流程Spring MVC常用注解Spring MVC的拦截器怎么去做请求拦截&#xff1f;其他cookie和session的区别cookie和session各自适合的场景session的工作原理get请求与post请求的区别get请求的参数能放到body里面…

JAVASE基础(一)

这里写目录标题一、javaSE基础1.jdk文档2.代码量统计工具3.文档注释4.反编译工具5.JDK、JRE、JVM&#xff08;java虚拟环境&#xff09;*6.变量命名规则7.变量的作用域8.数据类型9.进制10.反汇编器javap一、javaSE基础 1.jdk文档 Overview (Java Platform SE 8 ) (oracle.com…

stable-diffusion安装和简单测试

参考&#xff1a; https://github.com/CompVis/stable-diffusion 理解DALLE 2&#xff0c; Stable Diffusion和 Midjourney的工作原理 Latent Diffusion Models论文解读 【生成式AI】淺談圖像生成模型 Diffusion Model 原理 【生成式AI】Stable Diffusion、DALL-E、Imagen 背後…

面向对象编程(基础)3:对象的内存解析

目录 3.1 JVM内存结构划分 3.2 对象内存解析 举例&#xff1a; 内存解析图&#xff1a; 面试题&#xff1a;对象名中存储的是什么呢&#xff1f; 3.3 练习 3.1 JVM内存结构划分 HotSpot Java虚拟机的架构图如下。其中我们主要关心的是运行时数据区部分&#xff08;Runtime …

python字符编码

目录 ❤ 前言 文本编辑器存取文件的原理&#xff08;nodepad&#xff0c;pycharm&#xff0c;word&#xff09; python解释器执行py文件的原理 &#xff0c;例如python test.py 总结 ❤ 什么是字符编码? ASCII MBCS Unicode ❤ 字符编码的发展史 阶段一: 现代计算…

vue - vue中混入mixin的使用

vue中mixin混入的使用1&#xff0c;概念2&#xff0c;使用场景3&#xff0c;开始使用4&#xff0c;局部混入和全局混入5&#xff0c;总结1&#xff0c;概念 官方解释&#xff1a; 混入 (mixin) 提供了一种非常灵活的方式&#xff0c;来分发 Vue 组件中的可复用功能。一个混入对…

Python 自动化指南(繁琐工作自动化)第二版:十七、计时、安排任务和启动程序

原文&#xff1a;https://automatetheboringstuff.com/2e/chapter17/ 坐在电脑前运行程序是没问题的&#xff0c;但让程序在没有你直接监督的情况下运行也很有用。您计算机的时钟可以安排程序在某个指定的时间和日期或定期运行代码。例如&#xff0c;你的程序可以每小时抓取一个…