算法专题三:二分算法

二分法

  • 零.二分查找
    • 1.思路一:朴素二分
  • 一.在排序数组中第一个和最后一个数:
    • 1.思路一:
    • GIF题目解析
  • 二.算法X的平方根:
    • 1.思路一:暴力+哈希
    • 2.思路二:二分区间
    • GIF题目解析
  • 三.搜索插入位置:
    • 1.思路一:
    • GIF题目解析
  • 四:山脉数组的峰顶索引:
    • 1.思路一:
    • GIF题目解析
  • 五:寻找峰值:
    • 1.思路一:
    • GIF题目解析
  • 六:寻找旋转排序数组中的最小值
    • 1.思路一:
    • GIF题目解析
  • 七:0~~n-1中缺少的数字(点名):
    • 1.思路一:
    • GIF题目解析

零.二分查找

在这里插入图片描述
二分查找

1.思路一:朴素二分

在这里插入图片描述

class Solution {
public:
    int search(vector<int>& nums, int target) {
        int left=0;
        int right = nums.size()-1;

        while(left<=right)
        {
            int mid = (left+right)/2;

            //1.nums[mid] > target
            if(nums[mid]>target)
                right = mid-1;
            //2.nums[mid] < target
            else if(nums[mid]<target)
                left = mid+1;
            //3.nums[mid] == target
            else
                return mid;
        }

        return -1;
    }
};

一.在排序数组中第一个和最后一个数:

1.思路一:

在这里插入图片描述

特殊情况:
在这里插入图片描述

class Solution {
public:
    vector<int> searchRange(vector<int>& nums, int target) {
        int left = 0;
        int right = nums.size()-1;

        //处理边界情况
        if(nums.size() == 0)
            return {-1,-1};

        //1.确定左端点:
        while(left<right)
        {
            int mid = left + (right-left)/2;
            if(nums[mid] < target) left = mid+1;
            else if(nums[mid] >= target) right = mid;
        }
        if(nums[left]!=target) return {-1,-1};

        int begin = left;
        //2.确定右端点:
        left=0,right=nums.size()-1;
        while(left<right)
        {
            int mid = left+(right-mid+1)/2;
            if(nums[mid] <= target) left = mid;
            else if(nums[mid] > target) right = mid-1;
        }

        int end = left;
        return {begin,end};
    }
};

GIF题目解析

找左端点:
在这里插入图片描述

找右端点:

在这里插入图片描述

二.算法X的平方根:

在这里插入图片描述
X的平方根

1.思路一:暴力+哈希

在这里插入图片描述

2.思路二:二分区间

在这里插入图片描述

class Solution {
public:
    int mySqrt(int x) {
        if(x==0)
            return 0;

        long long  left = 1;
        long long  right = x;
        while(left<right)
        {
            long long  mid = left + (right - left + 1)/2;
            if((mid*mid) <= x) left = mid;
            else right = mid -1;
        }
        return left;
    }
};

GIF题目解析

在这里插入图片描述

三.搜索插入位置:

在这里插入图片描述
搜索插入位置

1.思路一:

在这里插入图片描述
在这里插入图片描述

class Solution {
public:
    int searchInsert(vector<int>& nums, int target) {
        int left = 0;
        int right = nums.size()-1;

        if(nums.size() == 1)
        {
            if(target > nums[0])
                return 1;
            if(target <= nums[0])
                return 0;
        }
        while(left < right)
        {
            int mid = left + (right - left)/2;
            if(nums[mid] < target) left = mid+1;
            else right = mid;
        }

        if(nums[right] < target) return right + 1;
        return right;
    }
};

GIF题目解析

在这里插入图片描述

四:山脉数组的峰顶索引:

在这里插入图片描述

山脉数组的峰顶索引

1.思路一:

在这里插入图片描述

class Solution {
public:
    int peakIndexInMountainArray(vector<int>& arr) {
        int left=0,right=arr.size()-1;

        while(left<right)
        {
            int mid = left + (right-left +1)/2;
            if(arr[mid-1] < arr[mid]) left=mid;
            else right = mid -1;
        }
        return left;
    }
};

GIF题目解析

在这里插入图片描述

五:寻找峰值:

在这里插入图片描述

寻找峰值

1.思路一:

在这里插入图片描述

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

GIF题目解析

在这里插入图片描述

六:寻找旋转排序数组中的最小值

在这里插入图片描述

寻找旋转排序数组中的最小值

1.思路一:

在这里插入图片描述

class Solution {
public:
    int findMin(vector<int>& nums) {

        int left = 0, right = nums.size() - 1;
        int n = nums[right];

        while (left < right)
        {
            int mid = left + (right - left) / 2;
            if (nums[mid] > n) left = mid + 1;
            else right = mid;
        }

        return nums[right];
    }
};

GIF题目解析

在这里插入图片描述

七:0~~n-1中缺少的数字(点名):

在这里插入图片描述
点名

1.思路一:

在这里插入图片描述

class Solution {
public:
    int takeAttendance(vector<int>& records) {
        int left = 0 , right = records.size()-1;

        while(left < right)
        {
            int mid = left + (right - left)/2;
            if(mid == records[mid]) left = mid +1;
            else right = mid;
        }
        if(records[left] == left)
            return left+1;
            
        return left;
    }
};

GIF题目解析

在这里插入图片描述

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

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

相关文章

Centos 8.5 Oracle12c安装

由于多次安装踩坑&#xff0c;所以本次写了一份12c安装的完整版。可以直接使用。 一、安装数据库基本信息 名称 值 主机名 database 操作系统 CentOS Linux release 8.5.2111 Oracle用户名/密码 oracle Oracle 版本 12c Enterprise Edition Release 12.2.0.1.0 oracle…

Android开发——activity类中的回调方法中的7个生存期

1、onCreate() 这个方法在每个活动中都能进行重写&#xff0c;他会活动在第一次被创建的时候调用。在这个方法中完成活动的初始化操作&#xff0c;如&#xff1a;加载布局、绑定事件等 2、onStart() 这个方法在活动由不可见变为可见的时候调用 3、onResume() 这个方法在活动中准…

扭蛋机小程序搭建,“互联网+”下的发展优势

随着我国生活水平和消费能力不断提高&#xff0c;人们对各种潮流文化类的产品需求也快速上升。至此&#xff0c;我国潮流文化市场得到了快速发展&#xff01; 扭蛋机作为潮玩中的一种商业模式&#xff0c;深受不同年龄层用户的喜爱。并且扭蛋机的种类也是各式各样&#xff0c;…

大数据可视化BI分析工具Apache Superset结合内网穿透实现远程访问

文章目录 前言1. 使用Docker部署Apache Superset1.1 第一步安装docker 、docker compose1.2 克隆superset代码到本地并使用docker compose启动 2. 安装cpolar内网穿透&#xff0c;实现公网访问3. 设置固定连接公网地址 前言 Superset是一款由中国知名科技公司开源的“现代化的…

Pooling方法总结(语音识别)

Pooling layer将变长的frame-level features转换为一个定长的向量。 1. Statistics Pooling 链接&#xff1a;http://danielpovey.com/files/2017_interspeech_embeddings.pdf The default pooling method for x-vector is statistics pooling. The statistics pooling laye…

[学习笔记]SQL Server中批量查找所有符合Where条件的记录

目标&#xff1a;在SQL Server中查找所有表的UserId 50的记录 创建一个表变量来存储所有包含’UserId’列的表的名称。然后使用一个游标遍历这些表&#xff0c;并对每个表执行一个动态SQL查询 DECLARE TableName nvarchar(256), ColumnName nvarchar(128), SearchStr2 nvarc…

【笔记】左偏树

左偏树详解 算法进阶课整理CSDN个人主页&#xff1a;更好的阅读体验左偏树功能简介定义与一些性质核心操作&#xff1a;合并算法流程时间复杂度代码 其他的操作插入算法流程时间复杂度 O ( log ⁡ n ) O(\log n) O(logn) 找最值算法流程时间复杂度 O ( 1 ) O(1) O(1) 删除最值…

matlab 最小二乘拟合平面(直接求解法)

目录 一、算法原理二、代码实现三、算法效果本文由CSDN点云侠原创,原文链接。爬虫网站自重。 一、算法原理 平面方程的一般表达式为: A x + B y +

【Linux】whereis命令使用

whereis命令 whereis命令用于查找文件。 使用whereis命令可以查找指定文件、命令和手册页的位置&#xff0c;不能搜索普通文件。 以前学习过 【Linux】 find命令使用 语法 whereis [选项] [文件] find命令 -Linux手册页 命令选项及作用 执行令 whereis --help 执行命…

JDBC常见的几种连接池使用(C3PO、Druid、HikariCP 、DBCP)

✨前言✨ 本篇作为主要在于介绍jdbc数据库连接池&#xff0c;以及多种连接池的用法 &#x1f352;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f352;博主将持续更新学习记录收获&#xff0c;友友们有任何问题可以在评论区留言 文章目…

HuggingFace下载模型

目录 方式一&#xff1a;网页下载 方式二&#xff1a;Git下载 方式一&#xff1a;网页下载 方式二&#xff1a;Git下载 有些模型的使用方法页面会写git clone的地址&#xff0c;有些没写&#xff0c;直接复制网页地址即可 网页地址&#xff1a; ​https://huggingface.co/…

李飞飞吴恩达等 2024 年 AI 十大预测!GPU算力短缺,AI 智能体一年内大爆发?

2023 这个大模型爆发的元年即将过去&#xff0c;展望未来&#xff0c;比尔盖茨&#xff0c;李飞飞&#xff0c;吴恩达等人对 2024 年人工智能的发展作出了自己的预测。 2023&#xff0c;可以说是人工智能的春天。 在过去的一年里&#xff0c;ChatGPT 成为家喻户晓的名字&#…

[ZJCTF 2019]NiZhuanSiWei1

[ZJCTF 2019]NiZhuanSiWei1 预测试 打开网页就是代码&#xff1a; <?php $text $_GET["text"]; $file $_GET["file"]; $password $_GET["password"]; if(isset($text)&&(file_get_contents($text,r)"welcome to the zjct…

【Spring实战】创建第一个项目

文章目录 使用 Spring Initializr 创建第一个项目1. 打开官网2. 填写信息3. 生成工程4. 解压工程5. 导入 IDEA6. 编写 Hello world7. 启动项目8. 访问验证9. 详细代码最后 Spring 是一个强大且广泛使用的 Java 开发框架&#xff0c;提供了全面的基础设施和工具&#xff0c;用于…

移动安全APP--Frida+模拟器,模拟器+burp联动

最近测APP被通报了&#xff0c;问题点测得比较深&#xff0c;涉及到frida和burp抓包&#xff0c;一般在公司可能会有网络的限制&#xff0c;手机没办法抓包&#xff0c;我就直接在模拟器上试了&#xff0c;就在这记录一下安装过程。 目录 一、Frida安装 二、burp与逍遥模拟器…

Lammps错误:domain too large for neighbor bins

关注 M r . m a t e r i a l , \color{Violet} \rm Mr.material\ , Mr.material , 更 \color{red}{更} 更 多 \color{blue}{多} 多 精 \color{orange}{精} 精 彩 \color{green}{彩} 彩&#xff01; 主要专栏内容包括&#xff1a; †《LAMMPS小技巧》&#xff1a; ‾ \textbf…

锂供应市场进入了年度议约季,价格或将进一步下调 | 百能云芯

随着锂价在今年的大跌&#xff0c;锂供应市场进入了年度议约季。目前&#xff0c;锂生产商正与主要客户展开讨论2024年的合约&#xff0c;主要集中在亚洲市场。不同于过去几年电动车热潮带来的销售增长&#xff0c;此次的谈判显示出锂市场将维持相对平稳的态势。然而&#xff0…

RTrPPG

研究背景 心率 (HR) 和脉搏率变异性 (PRV) 是允许分析心脏行为的两个生理参数。心率监测可以通过接触式和非接触式的两种方法进行。通常用于测量 HR 和 PRV 的两种接触式技术是心电图 (ECG) 和光电容积脉搏波 (PPG)。 ECG 测量由心脏活动引起的电场。另一方面&#xff0c;PPG …

c语言:从函数中返回多个变量

从函数中返回一个值可以使用返回值&#xff0c;但是如果要返回多个值呢&#xff1f; 你肯定想到了让被调函数修改主调函数内变量的方法---将指针作为参数传递到被调函数中。就像scanf函数那样。 scanf("%d%d%d", &a, &b, &c); // scanf从键盘读入3个…

React网页转换为pdf并下载|使用jspdf html2canvas

checkout 分支后突然报错&#xff0c;提示&#xff1a; Cant resolve jspdf in ... Cant resolve html2canvas in ... 解决方法很简单&#xff0c;重新 yarn install 就好了&#xff0c;至于为什么&#xff0c;我暂时也不知道&#xff0c;总之解决了。 思路来源&#xff1a; 先…