【C++算法】二分查找

news2024/9/21 18:46:58

 二分查找

  • 题目链接

二分查找icon-default.png?t=O83Ahttps://leetcode.cn/problems/binary-search/

  • 算法原理

  • 代码步骤

  • 代码展示
class Solution {
public:
    int search(vector<int>& nums, int target) 
    {
        int left = 0, right = nums.size() - 1;
        while(left <= right)
        {
            // 防止溢出
            int mid = left + (right - left + 1) / 2;
            if(nums[mid] < target) 
            {
                left = mid + 1;
            }
            else if(nums[mid] > target)
            {
                right = mid - 1;
            }
            else 
            {
                return mid;
            }
        }
        return -1;
    }
};

在排序数组中查找元素的第一个和最后一个位置

  • 题目链接

在排序数组中查找元素的第一个和最后一个位置icon-default.png?t=O83Ahttps://leetcode.cn/problems/find-first-and-last-position-of-element-in-sorted-array/

  • 算法原理

  • 代码步骤

  • 代码展示
class Solution {
public:
    vector<int> searchRange(vector<int>& nums, int target) 
    {
        if(nums.size() == 0)
        {
            return {-1, -1};
        }
        // 设置左端点和右端点
        int begin = -1, end = -1;

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

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

x的平方根

  • 题目链接

x的平方根icon-default.png?t=O83Ahttps://leetcode.cn/problems/sqrtx/

  • 算法原理

  • 代码展示
class Solution {
public:
    int mySqrt(int x) 
    {
        if(x == 0) return 0;
        int left = 1, 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;
    }
};

搜索插入位置

  • 题目链接

搜索插入位置icon-default.png?t=O83Ahttps://leetcode.cn/problems/search-insert-position/description/

  • 算法原理

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

山脉数组的峰顶索引

  • 题目链接

山脉数组的峰顶索引icon-default.png?t=O83Ahttps://leetcode.cn/problems/peak-index-in-a-mountain-array/description/

  • 算法原理

  • 代码展示
class Solution {
public:
    int peakIndexInMountainArray(vector<int>& arr) 
    {
        // 最左侧和最右侧元素不可能使山顶
        int left = 1, right = arr.size() - 2;
        while(left < right)
        {
            int mid = left + (right - left + 1) / 2;
            if(arr[mid] > arr[mid - 1])
            {
                left = mid;
            }
            else
            {
                right = mid - 1;
            }
        }
        return left;
    }
};

寻找峰值

  • 题目链接

寻找峰值icon-default.png?t=O83Ahttps://leetcode.cn/problems/find-peak-element/

  • 算法原理

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

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

  • 题目链接

寻找旋转排序数组中的最小值icon-default.png?t=O83Ahttps://leetcode.cn/problems/find-minimum-in-rotated-sorted-array/description/

  • 算法原理

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

点名

  • 题目链接

点名icon-default.png?t=O83Ahttps://leetcode.cn/problems/que-shi-de-shu-zi-lcof/description/

  • 算法原理

  • 代码展示
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(records[mid] == mid)
            {
                left = mid + 1;
            }
            else
            {
                right = mid;
            }
        }
        // if(left == records.size() - 1 && records[left] == left) return left + 1;
        // else return left;
        return left == records[left] ? left + 1 : left;
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI周报(9.8-9.14)

AI应用-NEKO Health用AI颠覆体检 Neko Health 由 Spotify 创始人丹尼尔埃克和哈亚尔马尔尼尔森共同创立&#xff0c;致力于通过每年的全身扫描和由 AI 驱动的洞察力来改善预防性医疗保健&#xff0c;能够检测诸如心脏病和皮肤癌等疾病。 该公司通过使用人工智能软件支持的全身…

Docker:对已有的容器,对当前容器映射的端口实时 (增删改查)

首先我的docker已经起了一个容器&#xff0c;我突然想把他的80->80映射的端口改成80->8080 但是我不想去新启动容器&#xff0c;想在现有容器基础上去修改&#xff0c;或者我想删除某个端口映射&#xff08;只是大概思路&#xff09; 如何寻找容器配置文件位置 首先我这…

【运维平台】WGCLOUD是如何判定主机下线的

只要被控主机的agent超过5分钟没有上报监测数据&#xff0c;系统就会判定该主机下线 这里的5分钟是默认的判定时间&#xff0c;如果agent上报时间是1分钟&#xff0c;那么agent超过1分钟没有上报数据&#xff0c;就会判定下线

优化IDEA卡顿,提示慢的问题,亲测有效!

1、优化JVM的参数 以下文件在idea安装目录的idea64.exe.vmoptions文件中。 一般来说我们只需要调整-Xms、-Xmx、-XX:ReservedCodeCacheSize三个即可&#xff0c;根据电脑的实际内存去调&#xff0c;我的电脑是48G内存&#xff0c;调到了 -Xms4096m (堆初始内存大小) -Xmx8192m…

多线程学习篇二:Thread常见方法

1. 常见方法 方法名 static 功能说明 注意点 start() 启动一个新线程&#xff0c;在新线程里面运行run方法 start 方法只是让线程进入就绪&#xff0c;里面代码不一定立刻运行(CPU 的时间片还没分给它)。每个线程对象的 start 方法只能调用一次&#xff0c;如果调用了多…

man命令详解

一、man命令简介&#xff1a; man是manual的缩写。操作手册之意。 本地的帮助文档称为man pages&#xff0c;这些操作手册随着软件安装而安装到本地&#xff0c;可以使用man命令进行查询。 随着软件包的安装有些操作手册会以文档的方式放在/usr/share/doc目录当中。…

初识HTTP

1、请求头中存储的是该请求的一些主要说明 accept:浏览器通过这个头告诉服务器&#xff0c;它所支持的数据类型 Accept-Charset:浏览器通过这个头告诉服务器&#xff0c;它支持哪种字符集 Accept-Encoding:浏览器通过这个头告诉服务器&#xff0c;支持的压缩格式 Accept-Lan…

微信这些危险设置一定要关!

你有仔细研究你的微信吗&#xff1f; 用了这么久的微信&#xff0c;才知道 有这么几个设置需要及时关闭&#xff01; 逐个操作更安心1️⃣取消不常用的免密支付和自动续费 我>服务>钱包>底部 支付设置>免密支付/自动续费2️⃣取消对附近陌生人授权位置 2️⃣取消对…

2024最新最全:SQL注入漏洞原理及利用方式

1.SQL注入 原理&#xff1a; 在数据交互中&#xff0c;前端的数据传入到后台处理时&#xff0c;由于后端没有做严格的判断&#xff0c;导致其传入的恶意“数据”拼接到SQL语句中后&#xff0c;被当作SQL语句的一部分执行。漏洞产生于脚本&#xff0c;注入是针对数据库进行。 …

卷轴模式系统中的任务起源探索与趣味性设计策略分析

卷轴模式系统中的“卷轴任务”是一种通过用户参与特定任务来获得奖励的机制&#xff0c;旨在增加用户的参与度和活跃度。下面我们将分析卷轴任务的起源和发展&#xff0c;以及如何通过趣味性设计来提升用户体验。 一、卷轴任务的起源与发展 1. 起源 卷轴任务的概念最早可以追…

​2024年最新python教程全套,现在分享给大家(python全栈)

加V备注&#xff1a;“教程”领取python零基础入门教程以及1节免费公开课 全套学习资料内容分享&#xff1a; 一、Python全面学习方向路线 该内容详细整理了所有Python学习中常用到的技术点&#xff0c;汇总了各个领域的知识点&#xff0c;你可以用它来精准的寻找到对应的学…

springboot阿尔茨海默病预防网站-计算机毕业设计源码77742

目录 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2网站分析 2.1 可行性分析 2.2 网站流程分析 2.2.1网站开发流程 2.2.2 用户登录流程 2.2.3 网站操作流程 2.2.4 添加信息流程 2.2.5 修改信息流程 2.2.6 删除信息流程 2.3 网站功能分析 …

一个开源的大语言模型(LLM)服务工具,支持Llama 3.1、Phi 3、Mistral、Gemma 2 等, 87.4k star你必须拥有(附源码)

这一年来&#xff0c;AI 发展的越来越快&#xff0c;大模型使用的门槛也越来越低&#xff0c;每个人都可以在自己的本地运行大模型。之前也给大家介绍过一些可以在本地运行大模型的项目&#xff0c;今天再给大家介绍一个最厉害的开源大模型服务框架——ollama。 项目介绍 Oll…

移动硬盘无法读取?别慌!这些方法助你恢复数据!

在我们的日常工作和生活中&#xff0c;移动硬盘作为重要的数据存储工具&#xff0c;承载着珍贵资料。然而&#xff0c;移动硬盘无法被电脑读取的情况时有发生&#xff0c;令人焦急。别慌&#xff0c;下面为大家详细介绍恢复移动硬盘数据的有效方法。 一、检查硬件连接和驱动问题…

gevent- monkey 补丁

协程gevent模块的使用_gevent.spawn-CSDN博客 阅读上面的博客&#xff0c;就可以理解 gevent.monkey 的作用&#xff0c;就是自动将socket、time等标准库替换成异步的库&#xff0c;是gevent让代码从同步变成异步的一种方式 现在来一段上面博客的代码 import gevent# 函数1 …

基于华为云服务器的网页部署

这仅仅是对自己使用过程中部分记录。后续有时间我会把从服务器租用到网页部署的全过程都整理下。 1. 华为云服务器的租用 可以前往华为云租弹性云服务器&#xff0c;具体配置可以看自己的需求&#xff0c;链接在这&#xff0c;我这边选择了ubuntu18.04版本的系统。   租用成…

春之学习体验:SpringBoot教育平台开发

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于在线视频教育平台当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了在线视频教育平台&#xff0c;它彻底改变了过…

bestphp‘s revenge1

进入这个页面又是令人激动的代码审计环节. 不过再次之前呢先补充一些弥足珍贵的知识点. 前置知识点&#xff1a; call_user_func() call_user_func() 是 PHP 中的一个非常有用的函数&#xff0c;它允许你调用一个回调函数。回调函数可以是一个匿名函数&#xff08;也称为闭…

C#实现串口中继

前一段时间为了测试硬件产品&#xff0c;发现&#xff0c;串口转发不太方便&#xff0c;于是自己写了一个简单的串口中继小程序&#xff0c;是基于C#开发的&#xff0c;可以将两个串口互通&#xff0c;方便自己在程序的使用&#xff0c;目前看起来应用还可以&#xff0c;现在把…

2024年最新软件测试面试题【附文档答案】

【纯干货&#xff01;&#xff01;&#xff01;】花费了整整3天&#xff0c;整理出来的全网最实用软件测试面试大全&#xff0c;一共30道题目答案的纯干货&#xff0c;希望大家多多支持&#xff0c;建议 点赞&#xff01;&#xff01;收藏&#xff01;&#xff01;长文警告&…