算法通关:006_4二分查找:寻找数组中的峰值

news2024/12/23 22:27:14

文章目录

  • 描述
  • 主要代码
  • 全部代码
  • 运行结果
  • 总结

二分法不一定只能用在有序数组中。

描述

leetcode:162
在这里插入图片描述

主要代码

  //二分法查找峰值
    public static int findPeakElement(int[] arr){
    
        if (arr.length == 1){//randomArray()不会出现arr = null的情况
            return 0;
        }
        //先检查  0  和  arr.length-1是不是峰值
        if(arr[0]> arr[1]){
            return 0;
        }if(arr[arr.length-2] < arr[arr.length-1]){
            return arr.length-1;
        }

		//第一个数和最后一个数肯定不是峰值,所以范围直接从1开始
        //这样m != 0恒成立,m-1不会越界
        int l = 1;
        int r = arr.length-2;
        int m = l + ((r - l)>>1);
        int ans = -1;

        //二分法寻找峰值
        while (l <= r){
            if (arr[m-1] > arr[m]){
                r = m-1;
            }else if (arr[m]<arr[m+1]){
                l = m+1;
            }else{
                ans = m;
                break;
            }
        }
        return ans;
    }

全部代码

import java.util.Arrays;

/**
 * @Author: ggdpzhk
 * @CreateTime: 2024-07-27
 * 特别的二分:寻找峰值问题
 *  leetcode:162
 */
//二分法不一定非得是 有序数组。比如在进行峰值查找问题时,就不用给数组排序
    //一个无序数组不可能没有峰值
public class _006_03_FindPeakElement {
    /*
    先找0位置,看是不是峰点,如果是返回数组下标
    找arr.length-1的位置,看看是不是峰点,如果是返回数组下标
    二分法找中点,与中点两侧进行对比,看是不是中点,如果是返回数组下标
                                          如果不是,根据上升下降的起伏,判断中点左侧还说右侧有峰点,继续二分
    * */

    public static void main(String[] args) {
        int N = 10;
        int V = 20;
        int testTimes = 5;

        for (int i = 0; i < testTimes; i++) {
            System.out.println("这是第"+(i+1)+"次测试");
            int n = (int) (Math.random() * N + 1);
            int[] arr = randomArray(n, V);
            System.out.println(Arrays.toString(arr));
            System.out.println("一个峰值是"+arr[findPeakElement(arr)]);
            System.out.println("____________________________");
        }

    }

    public static int[] randomArray(int n,int V){
        int[] arr = new int[n];
        for (int i = 0; i < arr.length;i++){
            arr[i] =(int)(Math.random()*V+1);
        }
        return arr;
    }

    //二分法查找峰值
    public static int findPeakElement(int[] arr){

        if (arr.length == 1){//randomArray()不会出现arr = null的情况
            return 0;
        }
        //先检查  0  和  arr.length-1是不是峰值
        if(arr[0]> arr[1]){
            return 0;
        }if(arr[arr.length-2] < arr[arr.length-1]){
            return arr.length-1;
        }

        
        int l = 1;
        int r = arr.length-2;
        int m = l + ((r - l)>>1);
        int ans = -1;

        //二分法寻找峰值
        while (l <= r){
            if (arr[m-1] > arr[m]){
                r = m-1;
            }else if (arr[m]<arr[m+1]){
                l = m+1;
            }else{
                ans = m;
                break;
            }
        }
        return ans;
    }
}

运行结果

在这里插入图片描述

总结

  • if-else
  1. 是二选一,条件结果是true或者false,没有第三种情况
  2. 只会运行一个代码块,另一个直接跳过不执行
  • if - if
  1. 条件结果是可能多种情况。代码块可能都会运行,也可能都不会运行。

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

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

相关文章

LabVIEW操作系列1

系列文章目录 我的记录&#xff1a; LabVIEW操作系列 文章目录 系列文章目录前言五、特殊用法5.1 取值范围表示5.2 对输入值取值范围进行限定5.3 控制多个While循环停止运行。5.4 获取按钮上的文本5.5 获取按钮上的文本【进阶】 六、使用步骤1.引入库2.读入数据 七、其余功能7.…

二叉树以及堆的实现

树 树的定义及概念 树是⼀种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09; 个有限结点组成⼀个具有层次关系的集合。把它叫做树是因为它看起来像⼀棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 有⼀个特殊的结点&#xff0c;称…

[Meachines] [Easy] Admirer Adminer远程Mysql反向+Python三方库函数劫持权限提升

信息收集 IP AddressOpening Ports10.10.10.187TCP:21,22,80 $ nmap -p- 10.10.10.187 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 21/tcp open ftp vsftpd 3.0.3 22/tcp open ssh OpenSSH 7.4p1 Debian 10deb9u7 (protocol 2.0) | ssh-hostkey: | …

Redis:十大数据类型

键&#xff08;key&#xff09; 常用命令 1. 字符串&#xff08;String&#xff09; 1.1 基本命令 set key value 如下&#xff1a;设置kv键值对&#xff0c;存货时长为30秒 get key mset key value [key value ...]mget key [key ...] 同时设置或者获取多个键值对 getrange…

万物互联,触手可及“2024南京智慧城市,物联网,大数据展会”

在金秋送爽的11月&#xff0c;南京这座历史悠久而又充满活力的城市&#xff0c;即将迎来一场科技盛宴——2024南京智慧城市、物联网、大数据展会。这不仅是一场技术的集会&#xff0c;更是未来生活蓝图的预览&#xff0c;它汇聚了全球顶尖的科技企业、创新者及行业精英&#xf…

制作PE启动U盘 预防电脑无法正常开机进入系统

PE 是一种简化版的便携式操作系统&#xff0c;它可以直接装载在 U 盘里运行。通过它我们能做非常多的应急操作&#xff0c;比如删除文件、卸载软件、拷贝数据、格式化硬盘、重装系统等。 在电脑无法正常开机进入系统&#xff0c;身边又没有其他电脑时&#xff0c;手头有个 PE …

Corsearch 用 ClickHouse 替换 MySQL 进行内容和品牌保护

本文字数&#xff1a;3357&#xff1b;估计阅读时间&#xff1a;9 分钟 作者&#xff1a;ClickHouse Team 本文在公众号【ClickHouseInc】首发 Chase Richards 自 2011 年在初创公司 Marketly 担任工程负责人&#xff0c;直到 2020 年公司被收购。他现在是品牌保护公司 Corsear…

【Linux】-----工具篇(编译器gcc/g++,调试器gdb)

目录 一、gcc/g 简单认识 程序的翻译过程认识gcc 预处理(宏替换) 编译 汇编 链接 宏观认识 如何理解&#xff08;核心&#xff09; 什么是链接&#xff1f; 链接的分类 二、gdb 基本的认识 基本操作及指令 安装gdb 启动gdb ​编辑 显示源代码(list) 运行程序…

网友提问:桌面与web开发哪个难度更大?

关于桌面应用开发与Web开发哪个难度更大的问题&#xff0c;实际上并没有绝对的答案&#xff0c;因为这取决于具体的开发任务、所使用的工具和技术栈等因素。不过&#xff0c;我们可以从几个方面来进行比较&#xff1a; 技术栈 Web开发&#xff1a; 前端通常涉及到HTML、CSS、J…

Ansible之playbook剧本编写(二)

tags 模块 可以在一个playbook中为某个或某些任务定义“标签”&#xff0c;在执行此playbook时通过ansible-playbook命令使用--tags选项能实现仅运行指定的tasks。 playbook还提供了一个特殊的tags为always。作用就是当使用always作为tags的task时&#xff0c;无论执行哪一个t…

全球奈拉滨市场规模预测:未来六年年复合增长率CAGR为1.1%

据恒州诚思研究&#xff0c;2023年全球奈拉滨市场规模大约为3.8亿元&#xff0c;预计未来六年年复合增长率CAGR为1.1%&#xff0c;到2030年市场规模将接近4.2亿元。这一增长反映了奈拉滨在全球医药行业中的重要性及其在未来发展中的潜在机会。随着科学的进一步发展和市场的扩展…

中小学汉字听写大赛方案及执行流程

一、活动背景 汉字作为中国最宝贵的文化遗产&#xff0c;在五千年的历史长河里&#xff0c;汉字以其浩瀚广博抒写着华夏历史&#xff0c;以其灵秀展示着炎黄之精神。传承汉字文明是我们的使命和主责任。为提高我校七年级学生听写汉字的能力&#xff0c;规范汉字书写的能力&…

ESD防护之电容妙用

谈到ESD防护&#xff0c;应用最广泛的是ESD/TVS管&#xff0c;对于正负4KV的pin脚不上电ESD测试&#xff0c;也可以仅仅依靠nf级电容完成ESD防护。下面以一篇实际案例进行说明。 实验要求&#xff1a;正负4KV对产品connector的Pin脚进行ESD测试&#xff0c;connector中的地脚接…

idea启动项目报:the command line via JAR manifest or via a classpath file and rerun.

解决方案 1.打开Edit Configurations&#xff0c;进去编辑&#xff0c;如下&#xff1a; 笔记配置 2.选择Modfiy options,点击Shorten command line 3.在新增的Shorten command line选项中选择JAR manifest或classpath file 4.点击保存后即可

企业如何通过红酒传达品牌理念?

在繁忙的商业世界中&#xff0c;品牌理念的传达往往是企业成功的关键。而红酒&#xff0c;这一优雅的饮品&#xff0c;不仅具有深厚的文化底蕴&#xff0c;更是品牌理念传递的很好载体。今天&#xff0c;我们就来探讨一下企业如何通过定制红酒——特别是洒派红酒&#xff08;Bo…

Java漏洞复现(ctfshow279-297)strust 漏洞复现及原理解释

Java漏洞复现 Strust原理 JavaEE--------Struts2框架-CSDN博客 Web279 struts2漏洞 S2-001是当用户提交表单数据且验证失败时&#xff0c;服务器使用OGNL表达式解析用户先前提交的参数值&#xff0c;%{value}并重新填充相应的表单数据。 这里的%{value}简单理解就是和flask的…

【计算机网络】IP分片实验

一&#xff1a;实验目的 1&#xff1a;理解IP数据报分片的工作原理。 2&#xff1a;理解IP协议报文类型和格式。 二&#xff1a;实验仪器设备及软件 硬件&#xff1a;RCMS-C服务器、网线、Windows 2019/2003操作系统的计算机等。 软件&#xff1a;记事本、WireShark、Chrom…

昇思25天学习打卡营第22天|CycleGAN图像风格迁移互换

相关知识 CycleGAN 循环生成网络&#xff0c;实现了在没有配对示例的情况下将图像从源域X转换到目标域Y的方法&#xff0c;应用于域迁移&#xff0c;也就是图像风格迁移。上章介绍了可以完成图像翻译任务的Pix2Pix&#xff0c;但是Pix2Pix的数据必须是成对的。CycleGAN中只需…

DosSnake-入土为安第八天

记录一下不能F5反编译 加密方式 密文 异或操作函数 xor_string_with_key&#xff1a; 接受两个字符串作为输入&#xff1a;待处理的 text 和 key。对每个字符进行异或操作。使用 ord(char) 获取字符的 ASCII 值&#xff0c;ord(key[i % key_length]) 是 key 中对应位置的字符的…

3D Web轻量化引擎HOOPS Communicator针对复杂大模型Web端可视化的解决方案

随着工程设计、制造和建筑领域中三维模型的日益复杂化&#xff0c;如何在Web端高效处理和展示这些大规模数据成为一大挑战。HOOPS Communicator作为一款强大的3D可视化工具&#xff0c;提供了一套针对复杂大模型的轻量化解决方案&#xff0c;涵盖了模型轻量化及格式转换、超大模…