2019独角兽企业重金招聘Python工程师标准>>>

1、题目名称

Find Peak Element(寻找一个数组内的顶点)

2、题目地址

https://leetcode.com/problems/find-peak-element/

3、题目内容

英文:

A peak element is an element that is greater than its neighbors.

Given an input array where num[i] ≠ num[i+1], find a peak element and return its index.

The array may contain multiple peaks, in that case return the index to any one of the peaks is fine.

You may imagine that num[-1] = num[n] = -∞.

中文:

在一个数组内,如果某元素比它左右两个元素都大,则称该元素为一个“顶点”。现给出一个相邻元素一定不相同的数组,找出一个顶点元素并返回它的索引。一个数组中可能包含多个顶点,在这种情况下返回任意一个顶点的坐标即可。你可以假定第-1个元素和第n个元素是负无穷(这句话的意思就是最左边的元素假定它“再左边”还有一个比它小的元素,最右边的元素同理)。

例如:给定数组 [1, 2, 3, 1],则元素3是一个顶点,应返回它的索引值2

4、解题方法1

最容易想到的办法自然是自左至右遍历数组,如果某元素比它左边和右边的元素大,则该元素必为顶点。返回找到的第一个顶点即可。

Java代码如下:

/*** @功能说明:LeetCode 162 - Find Peak Element* @开发人员:Tsybius2014* @开发时间:2015年11月4日*/
public class Solution {/*** 寻找顶点* @param nums* @return*/public int findPeakElement(int[] nums) {if (nums == null) {return -1;} else if (nums.length == 0) {return -1;} else if (nums.length == 1) {return 0;} else if (nums[0] > nums[1]) {return 0;} else if (nums[nums.length - 1] > nums[nums.length - 2]) {return nums.length - 1;}for (int i = 1; i < nums.length - 1; i++) {if (nums[i - 1] <= nums[i] && nums[i + 1] <= nums[i]) {return i;}}return -1;}
}

4、解题方法2

另一种方法是使用二分查找法解决问题。这个方法利用了题目中的如下性质:

1)最左边的元素,它“更左边”的元素比它小(负无穷),我们认为它是一个增长的方向

2)最右边的元素,它“更右边”的元素比它小(也是负无穷),我们认为它是一个下降的方向

根据这两点我们可以判断:最左边和最右边的元素围成的区域内,必有至少一个顶点

现在我们找到中点 nums[mid],将它与 nums[mid + 1] 作比较,如果前者较小,则方向是增长,与最左边的元素是一致的,就把左边界挪到mid+1的位置;否则与最右边的元素一致,将右边界挪到mid的位置。

这个方法的原理就是当左边界方向为“增长”,右边界方向为“下降”时,二者围出的区域必有一个顶点。我们可以写出如下Java代码实现此方法:

/*** @功能说明:LeetCode 162 - Find Peak Element* @开发人员:Tsybius2014* @开发时间:2015年11月4日*/
public class Solution {/*** 寻找顶点* @param nums* @return*/public int findPeakElement(int[] nums) {if (nums == null) {return -1;} else if (nums.length == 0) {return -1;} else if (nums.length == 1) {return 0;} int left = 0;int mid = 0;int right = nums.length - 1;while (left < right) {mid = left + (right - left) / 2;if (nums[mid] < nums[mid + 1]) {left = mid + 1;} else {right = mid;}}return left;}
}

本题也可以使用递归的方式进行二分搜索。

END

转载于:https://my.oschina.net/Tsybius2014/blog/526016

LeetCode:Find Peak Element - 寻找一个数组内的顶点相关推荐

  1. java快速寻找一个数组的最大值或最小值, min, max,三种方法

    java 中 寻找一个数组中的最大值或最小,除了自己专门编写一个 min 或 max 函数外,还有几种方式方便使用. 1. 使用 stream 将一个数组放进 stream 里面,然后直接调用 str ...

  2. php 数组合并字符,PHP将字符串或数组合并到一个数组内方法

    本文主要和大家分享PHP将字符串或数组合并到一个数组内方法,有两种方法,希望希望能帮助到大家. 一般写法:<?php /** * add a string or an array to anot ...

  3. LeetCode 1764. 通过连接另一个数组的子数组得到一个数组

    文章目录 1. 题目 2. 解题 1. 题目 给你一个长度为 n 的二维整数数组 groups ,同时给你一个整数数组 nums . 你是否可以从 nums 中选出 n 个 不相交 的子数组,使得第 ...

  4. java 输入数字到数组_java怎么实现输入n个数字赋值到一个数组内?

    展开全部 数组的长度是固定的62616964757a686964616fe4b893e5b19e31333365646239,这是肯定的,那就知道定义一个长度,不如是10,你循环输入,每次在循环里面检 ...

  5. 利用C语言 计算一个数组内的平均值

    #include<stdio.h> #define N 5 int main() { int a[N]; int i,s=0; printf("input %d numbers: ...

  6. LeetCode简单题之重新排列数组

    题目 给你一个数组 nums ,数组中有 2n 个元素,按 [x1,x2,-,xn,y1,y2,-,yn] 的格式排列. 请你将数组按 [x1,y1,x2,y2,-,xn,yn] 格式重新排列,返回重 ...

  7. 每天一道LeetCode-----摩尔投票法寻找给定数组中出现个数大于n/2或n/3的元素

    Majority Element 原题链接Majority Element 给定一个数组,元素个数为n,找出出现次数大于n/2的那个元素 摩尔投票法思想 每次从数组中选择两个不相等的元素进行相互抵消( ...

  8. 找出一个数组中唯一一个出现2次的数字

    找出一个数组中唯一一个出现2次的数字,不清楚是不是LeetCode上的题.本人默认是LeetCode上的题. 一个数组中有N个数字,但是只有一个数字出现了2次,其他的数字均不相同.这种问题一般应该采用 ...

  9. leetcode 162. Find Peak Element | 162. 寻找峰值(二分法找局部最大值)

    题目 https://leetcode.com/problems/find-peak-element/ 题解 2021-7-21 16:28:31 更新版思路: 根据左神在 课上 说的,可以使用二分法 ...

最新文章

  1. cloudstack 4.0 XenServer 日常简单故障处理
  2. 大型互联网应用中的日志系统
  3. python编程从入门到实践读书笔记-《Python编程:从入门到实践》项目部分读书笔记(二)...
  4. 响应式 媒体查询 盒模型
  5. IDEA好用的Servlet模板
  6. 使用Visual Studio Code 开发.NET Core应用程序
  7. bson json c语言,对比平台--JSON和BSON之间的区别
  8. zoj 3488 conic section
  9. jquery根据身份证号码计算出生日期、年龄、性别代码
  10. spring boot实战 静态资源处理
  11. 牛客网——判断上三角矩阵
  12. 各种排序是否稳定,不稳定是为什么
  13. ZigBee模块无线通信组网结构技术之Mesh拓扑网状
  14. 苹果手机计算机科学,手机科学计算器app_计算器软件应用推荐_iPhone_苹果ios_安卓...
  15. java f else_java else if 为什么比 switch 效率低?最好可以解释下原理
  16. 当前服务器系统内核版本是多少,linux下如何查看系统和内核版本
  17. sort在c语言中的作用,c语言中sort的用法详解.docx
  18. 电力变电站三维可视化
  19. Z世代成消费主力,还呗布局消费分期正当时
  20. CSS实现自适应布局:子元素项目整体居中,内部项目左对齐

热门文章

  1. 正则表达式表示的IP
  2. 能从入门到精通的 Docker 学习指南
  3. 什么是WebSocket,它与HTTP有何不同?
  4. unreal4怎么设置游戏模式_ue4(虚幻4)基础 Unreal4 服务器模式详细介绍
  5. 【Win32 API学习】模拟键盘输入和鼠标输入
  6. python基础===利用unittest进行测试用例执行的几种方式
  7. 记录一次跨国笔试经过
  8. AngularJs 1.5 $location获取url参数
  9. NoSQL数据库的分布式算法memcache集群的实现
  10. 通过yum安装Nagios