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…

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&…

深入浅出.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并安装 …

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))。…

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

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

我们还有理想吗?

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

17. Letter Combinations of a Phone Number

1 题目理解 给定一个字符串string&#xff0c;字符范围是[2,9]之间的数字。数字表示电话上的一个按钮。返回字符串的可能所有组合方式。每个数字对应的字母如下图所示。 Example 1: Input: digits “23” Output: [“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”…

第九十四期:GitHub 发布 2019 年年度报告

GitHub 发布了 2019 年年度报告《The State of the Octoverse》&#xff0c;下边来看看一些主要数据。 作者&#xff1a;佚名 GitHub 发布了 2019 年年度报告《The State of the Octoverse》&#xff0c;下边来看看一些主要数据。 全球用户超过 4 千万 目前 GitHub 上有超过…

COM 组件设计与应用(十一)

COM 组件设计与应用&#xff08;十一&#xff09;IDispatch 及双接口的调用作者&#xff1a;杨老师 下载源代码一、前言 前段时间&#xff0c;由于工作比较忙&#xff0c;没有能及时地写作。其间收到了很多网友的来信询问和鼓励&#xff0c;在此一并表示感谢。咳......我也需…

39. Combination Sum

文章目录1题目理解2 回溯分析3 40. Combination Sum II3.1 延续39解题思路3.2 新思路3.3 递归计数的方式4 216. Combination Sum III1题目理解 Given an array of distinct integers candidates and a target integer target, return a list of all unique combinations of ca…

第九十五期:Python帮你识破双11的套路

一年一度的“双十一”又要来了&#xff0c;很多人已经开始摩拳擦掌&#xff0c;毕竟几天之后手还在不在就不好说了。 作者&#xff1a;清风小筑 各种社交软件也是跟着遭殃&#xff0c;整天就是“来帮我一起盖楼”&#xff0c;各种字体绕过屏蔽&#xff0c;什么奇葩的脑洞也出来…

客户端独立弹出详细的实现过程

拷贝粘贴以下代码段&#xff0c;保存为html文件&#xff0c;试试看效果如何吧。。。前几天贴子没写东西就搁在上面搁了几天&#xff0c;真不好意思。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" ><HTML><HEAD></HEAD>&…

Unity3D性能优化之Draw Call Batching

在屏幕上渲染物体&#xff0c;引擎需要发出一个绘制调用来访问图形API&#xff08;iOS系统中为OpenGL ES&#xff09;。每个绘制调用需要进行大量的工作来访问图形API&#xff0c;从而导致了CPU方面显著的性能开销。Unity在运行时可以将一些物体进行合并&#xff0c;从而用一个…

第九十六期:JavaScript 中的 4 个相等比较算法的介绍

JavaScript 运算中&#xff0c;一共包含 4 个相等比较算法&#xff1a;抽象相等比较&#xff1b;严格相等比较&#xff1b;SameValueZero&#xff1b;SameValue。 作者&#xff1a;zhangbao90s JavaScript 运算中&#xff0c;一共包含 4 个相等比较算法&#xff1a; 抽象相等…

第九十七期:新版Kite:实时补全代码,Python之父都发声力挺!

不久前&#xff0c;一个免费的专门针对 Python 的代码补全工具 Kite&#xff0c;有了新的动态。 作者&#xff1a;杨鲤萍 本文转自雷锋网&#xff0c;如需转载请至雷锋网官网申请授权。 不久前&#xff0c;一个免费的专门针对 Python 的代码补全工具 Kite&#xff0c;有了新…

svn 版本升级的问题

原创文章&#xff0c;转载请注明 svn本地版本由1.6升级到1.7后&#xff0c;再使用时遇到一些问题&#xff0c;这里记录一下以备忘。 升级后&#xff0c;使用任何命令 不能用了&#xff0c;提示的意思大致是本地的workcopy版本太低了&#xff08;之前用1.6版本&#xff0c;check…

[JavaME]手机申请移动分配的动态IP(3)?

获取IP后是否可以和它通讯呢&#xff1f;<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />Hi&#xff0c;继续上回的讨论《[JavaME]手机是否能够申请到动态IP[2]?》。 上回说到申请动态IP是可以了&#xff0c;并且准备好了一个线…