首页 > 编程语言 >【C++习题】22.二分查找算法_寻找峰值

【C++习题】22.二分查找算法_寻找峰值

时间:2024-11-30 13:32:37浏览次数:12  
标签:right 22 nums int mid C++ 习题 left

文章目录


题目链接:

162. 寻找峰值


题目描述:

0c52c23c10a6d03b081e95db6ed47a2c


解法

1d47d656c91730c2b994297b95de2f85

暴力解法:

三种山峰的情况

  1. 开始元素比它后面一个元素大的话直接就是山峰了(因为nums[-1] = nums[n] = -∞
  2. 普通山峰
  3. 最后一个元素比前面一个元素大的话直接就是山峰了

二分算法:

首先要找二段性

c56513689f0f62624b04425e4eb646db


C++ 算法代码:

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] > nums[mid - 1]) left = mid;
            else right = mid - 1;
        }
        return left;
    }
};

图解

例如:nums = [1,2,3,1]

4c406f736f5344bc8caf3f07856aa370

  1. left = 0, right = 2

    进入循环,mid=1

    nums[mid] > nums[mid - 1],left = mid = 1

  2. left = 1, right = 2

    进入循环,mid=2

    nums[mid] > nums[mid - 1],left = mid = 2

  3. left = 2, right = 2

    跳出循环,返回2

标签:right,22,nums,int,mid,C++,习题,left
From: https://blog.csdn.net/hlyd520/article/details/144153499

相关文章

  • 【工具变量】中国省级农村创业活跃度数据(2000-2022年)
    一、测算方式:参考《金融与经济》黄敦平(2023)老师研究的做法,农村创业活跃度(REP)利用农村私营企业就业人数和个体就业人数之和与乡村人口总数的比重衡量农村创业活跃度,该比值越大,创业活跃度越高。二、数据范围:省级数据三、包含指标:具体指标为行政区划代码      地区  ......
  • [C++][CMake][Error] set_target_properties called with incorrect number of argume
    1简介这篇文章将探讨了在使用CMake构建C++项目时,调用set_target_properties函数时参数数量不正确所引发的问题。2错误案例以下为可能发生错误的案例include_directories(${CMAKE_SOURCE_DIR}/common)find_package(Threads)add_library(libusbmuxdSHAREDlibusbm......
  • 20222423 2021-2022-2 《网络与系统攻防技术》实验七实验报告
    1.实验内容1.1内容回顾本周学习内容主要聚焦于Web安全,了解了常见的web技术,比如前后端的概念,前端常用语言(如css,html,js等),后端常用语言(c,c++,java,python等等),深入学习了SQL注入的基本原理和实现方式,没想到通过修改连接提交中的一些看似不起眼的字符,就能对服务器端造成极大的......
  • [C++][MSVC][Error] 检测到 RuntimeLibrary 的不匹配项: 值 MT_StaticRelease 不匹配
    1简介本文将介绍在C++编程中使用MSVC编译器时可能遇到的错误:检测到RuntimeLibrary的不匹配项:值MT_StaticRelease不匹配值MD_DynamicRelease。该错误通常是由于编译器和链接器之间的设置不一致引起的。2VisualStudio环境在MSVC工程上右键->属性,找到配置属性->C/C......
  • [C++][MSVC][Error] __acrt_first_block == header
    1简介当你使用MSVC编译器时遇到的__acrt_first_block==header错误通常与内存管理问题有关,特别是涉及到C运行时库(CRT)。这个错误通常是由于不同模块(如DLL和EXE)在使用不同CRT时分配和释放内存的方式不匹配引起的。具体来说,当使用/MTd标志时,每个模块都会链接到其......
  • 使用 C++ 实现 FP16 转 FP32 算法
    1简介在当今高性能计算和深度学习领域,半精度浮点数(FP16)因其存储空间小、计算效率高的特点而被广泛应用。然而,在某些场景下,如精度要求较高的科学计算或者需要与FP32数据格式兼容的情况,将FP16转换为FP32就显得尤为重要。本文将介绍一种基于C++实现的FP16到FP32的转换......
  • vs2022中windows窗体winform没有窗体设计器问题处理
    环境:vs2022,.net8,winfrom项目。问题:这几天重新换了个代码托管库,上传拉取代码后(换了本地目录),发现所有窗体都只能打开代码,不能打开窗体设计器进行控件的调整修改等。网上找了n多资料都无效。无意中发现是.user文件导致,这个文件一般在源码管理中是排除的。处理如下:项目名:WinForms......
  • c++历史
    #1.起源与初期阶段(1980s)##1.1BjarneStroustrup与C++的诞生C++的历史起源于1979年,当时BjarneStroustrup在AT&T贝尔实验室工作,他的目标是创建一种新编程语言,这种语言能够结合C语言的高效性和灵活性,同时加入面向对象编程(OOP)的特性以提高软件的可维护性和可扩展性。Stroust......
  • 20222424 2021-2022-2 《网络与系统攻防技术》实验七实验报告
    202224242021-2022-2《网络与系统攻防技术》实验七实验报告1.实验内容1.1本周学习内容Web安全基础/前后端SQL注入原理XSS脚本攻击CSRF漏洞1.2实验内容及要求本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法。具体实践有(1)简单应用SET工具建......
  • 20222409 2024-2025-1 《网络与系统攻防技术》实验五实验报告
    1.实验内容1.1本周学习内容本周学习了信息收集与渗透测试相关技术,主要包括Metasploit、nmap和Nessus的使用。Metasploit是渗透测试框架,能提供多种攻击模块,如远程代码执行、提权和后渗透功能(如键盘记录、文件操作等),可用于模拟攻击和漏洞利用;nmap被用于扫描目标主机的端口和服......