162. Find Peak Element

文章目录

  • 1 题目理解
  • 2 线性扫描
  • 3 递归二分查找

1 题目理解

输入:int[] nums并且 nums[i]!=nums[i+1]
输出:找到称为峰值的那个数字,返回其下标。
规则:峰值是指:nums[i-1]<nums[i] 并且 nums[i+1]<nums[i]。你可以认为nums[-1] = nums[n] = -∞.只要返回其中的一个峰值下标即可。

2 线性扫描

参考网址
我们可以利用nums[i-1]<nums[i],nums[i+1]<nums[i]找到峰值。当我们遇到一个数字的时候只需要判断nums[i]>nums[i+1]即可。 为什么是这样,下面分三种情况描述。

情况1,所有数字以降序排列。在这种情况下第一个元素就是峰值。我们判断nums[i]>nums[i+1],就得出结论。当然这个时候我们不需要判断nums[i-1]与nums[i]。
在这里插入图片描述

情况2:所有元素以上升序列排列。最后一个元素是峰值。在这种情况下我们会一直判断nums[i]与nums[i+1]的关系,一直不符合nums[i]>nums[i+1],所以选择最后一个元素为峰值。
在这里插入图片描述

情况3:峰值处于中间某处。当遍历上升部分的时候,与情况2相同,没有元素满足nums[i]>nums[i+1]。我们不需要比较nums[i]与上一个元素nums[i-1]的关系。当达到峰值元素时候,nums[i]>nums[i+1]满足条件,不需要判断nums[i]与上一个元素nums[i-1]的关系。由于会遍历到nums[i],就已经证明了nums[i-1]<nums[i]。某则就判断为峰值了。
在这里插入图片描述

class Solution {public int findPeakElement(int[] nums) {for(int i=1;i<nums.length;i++){if(nums[i]<nums[i-1]){return i-1;}}return nums.length-1;}
}

3 递归二分查找

二分法用于有序数数中。我们可以将一个普通数组看做是升序降序交替的数组。结果只要返回其中一个峰值即可。利用这两点,我们可以使用二分。

如果当前处理的元素处于下降子序列,那么峰值一定在这个值的左边,也可能包含这个值。如果当前处理的元素处于上升子序列,那么峰值一定在这个值的右边。因为比较的是nums[i]和nums[i+1]的关系,所以在此情况下,峰值肯定不是当前元素。

class Solution {public int findPeakElement(int[] nums) {return findPeakElement(nums,0,nums.length-1);}private int findPeakElement(int[] nums,int l,int r){if(l==r) return l;int m = l +((r-l)>>1);if(nums[m]>nums[m+1]){return findPeakElement(nums,l,m);}else{return findPeakElement(nums,m+1,r);}}
}

leetcode 852和本题分析思路一样。

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

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

相关文章

spring mvc学习(11):eclipse的环境maven项目创建前期工作

1创建maven项目 2pom.xml有红色错误&#xff0c;生成web目录 3修改pom.xml配置 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instan…

第二章《蜂群思维》

白痴的选举大厅&#xff0c;由白痴选白痴&#xff0c;其产生的效果却极为惊人。蜂群曾如同日蚀一样神秘、深不可测&#xff0c;他们如同被释放的精灵一样从蜂巢涌出来&#xff0c;并缓缓漂移到另一个新的世界里去。这之中没有绝对的统治者&#xff0c;他们通过侦查员的探测&…

Visual Studio.Net 快捷键表

快捷键 功能CTRL SHIFT B生成解决方案CTRL F7 生成编译CTRL O 打开文件CTRL SHIFT O打开项目CTRL SHIFT C显示类视图窗口F4 显示属性窗口SHIFT F4显示项目属性窗口CTRL SHIFT E显示资源视图F12 转到定义CTRL F12转到声明CTRL ALT J…

69. Sqrt(x)

1 题目理解 输入一个x&#xff0c;返回这个数据的平方根。如果平方跟不是整数&#xff0c;就只取整数部分。 例如x4&#xff0c;返回2&#xff1b;x8&#xff0c;返回2。 2 二分 套用模板&#xff0c;要找一个g(x)函数。g(m)m*m>x&#xff0c;找这个函数的最小值。一个数…

spring mvc学习(12)---使用idea创建第一个maven项目

一.准备条件&#xff1a; 1.安装idea旗舰版 2.安装tomcat 二.打开idea开始创建 1.创建Project 2.选择项目类型为maven 3.输入组名和项目名 ---> 下一步 ---->下一步 4.maven项目创建完成 5.运行 &#xff08;1&#xff09;配置tomcate (2)添加tomcat &#xff08;3&…

Mybaties配置一对多关系sql实例

<!-- resultMap中的type表示返回什么类型的对象 --><resultMap id"BaseGoods" type"com.cn.hjsj.pojo.BaseGoods"><!-- property 表示com.cn.hjsj.pojo.BaseGoods中的属性&#xff1b; column 表示表中的列名 --><!-- association字面…

深入浅出.NET泛型编程(1)

深入浅出.NET泛型编程(1) 使用泛型集合  .NET 2.0的System.Collections.Generics 命名空间包含了泛型集合定义。各种不同的集合/容器类都被"参数化"了。为使用它们,只需简单地指定参数化的类型即可。请看例2:例2.类型安全的泛型列表List&#xff1c;int&#xff1e…

74. Search a 2D Matrix

文章目录1 题目理解2 二分1 题目理解 输入&#xff1a;一个mxn的int数组matrix&#xff0c;这个数组每一行按照从小到大排序&#xff0c;并且下一行的第一个值大于上一行的最后一个值。一个int值target 返回&#xff1a;target在matrix中是否存在。存在返回true。 2 二分 我…

spring mvc学习(13)windows上安装maven

本地安装与配置&#xff1a; 1.jdk 在cmd中运行 Java -version 2.下载maven包 https://maven.apache.org/download.cgi下载最新版的Maven程序&#xff1a;&#xff08;选择bin zip包&#xff09; 将文件解压在D:\Program Files\apache-maven-3.5.4 3.下载eclipse并安装 …

vmware 5.51 下安装Ubuntu Linux8.04安装vmware tools不成功

得空安装Ubuntu Linux体验一把&#xff0c;记得最早还是98,99,2000年的时候玩的&#xff0c;什么冲浪(Xteam)、红帽子、红旗、蓝点&#xff0c;TurboLinux. 那时候版本都是什么1.0,2.0,3.0之类的&#xff0c; 好像Turbo Linux版本最高到4.0了。 如今已经很少有人知道蓝点Linux了…

拜拉特夜

拜拉特夜(Barat)又称“赦免之夜”&#xff0c;指伊斯兰教历舍尔巴尼月&#xff08;八月&#xff09;十五这日的夜晚。“拜拉特”意为“无辜、清白”&#xff0c;引申为“赦免”之意。这一夜安拉将更换所有人下一年命运的“文卷”&#xff0c;所以这是忏悔之夜、讨白之夜。穆斯林…

歌谣带你看java面试题

面试题来源与各个网站&#xff0c;如有不合理之处&#xff0c;欢迎吐槽。 第一题.java面试题1 牛客&#xff1a;A派生出子类B&#xff0c;B派生出子类C&#xff0c;并且在java源代码中有如下声明&#xff1a; 第二题.java面试题2 牛客:定义类中成员变量时不可能用到的修饰是 …

875. Koko Eating Bananas

文章目录1 题目理解2 二分3 相似题目10111 题目理解 输入&#xff1a;koko是个猴子&#xff0c;喜欢吃香蕉。输入int[] piles&#xff0c;表示有n堆香蕉&#xff0c;每堆香蕉有piles[i]个。koko喜欢慢慢吃香蕉&#xff0c;但还是希望在H个小时内把香蕉吃完。因为H小时之后&…

应该算是在说 delphi 的日志框架吧

最早接触 delphi 的日志是在 B 站上一个自称 老侯 的人发的视频里&#xff0c;视频名是 [delphi基础教程 第一季] 这个应该是他在B站的个人空间吧 https://space.bilibili.com/323024121 后来找 log4D 资料的时候找到了这个网站 http://www.raebear.net/ 记录 Log4D 的几句代码…

唯一

悠扬&#xff0c;流畅&#xff0c;很有韵味的感觉&#xff0c;大声对你深爱的人说你是我的唯一王力宏新专辑首支主打歌"唯一"&#xff0c;打动不少歌迷&#xff0c;觉得王力宏唱来格外有感情&#xff0c;原来是因为这首歌说的就是他自身的感动&#xff0c;凭吊一段逝…

spring mvc学习(14) the superclass “javax.servlet.http.HttpServlet” was not found

问题描述&#xff1a;   我们在用MyEclipse进行Java web开发时&#xff0c;可能会出现这样的错误&#xff1a;The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path。我们该怎么解决这个问题呢&#xff1f; 我遇到的错误显示如下…

4. Median of Two Sorted Arrays

文章目录1题目理解2 二分查找解题2.1中位数的定义2.2 数组切分2.3分析条件1题目理解 输入&#xff1a;2个已经排序号的int数组nums1,nums2 输出&#xff1a;这两个数组合并后的中位数 要求&#xff1a;m是nums1的长度&#xff0c;n是nums2的长度。时间复杂度应该是O(log(mn))。…

今天开通一个真正属于自己的博客了《L.M》

Hello, world!在这里希望能跟大家一起分享&#xff0c;交流&#xff0c;不为别的&#xff0c;只因喜欢做自己想做的事情&#xff0c;请各位同行多多指教&#xff0c;谢谢&#xff01;转载于:https://www.cnblogs.com/LceMeaning/archive/2012/12/10/2810999.html

第九十三期:带你聊聊 Java 并发编程之线程基础

百丈高楼平地起&#xff0c;要想学好多线程&#xff0c;首先还是的了解一下线程的基础&#xff0c;这边文章将带着大家来了解一下线程的基础知识。 作者&#xff1a;小九 01、简介 百丈高楼平地起&#xff0c;要想学好多线程&#xff0c;首先还是的了解一下线程的基础&#x…

我们还有理想吗?

兴致勃勃从海边享受了几天,本来打算回来后在这里写上几篇.其中还准备了一篇名为"一千个不加班的理由".可笑的是今天就从梦中醒来.因为有几个项目要加快投标准备了.我唯一能做的是耸耸肩膀,公司的事情当然要做,现实就是现实!前几天和老同学突然谈起一个话题,别的行业的…