题目描述:

峰值元素是指其值大于左右相邻值的元素。给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。你可以假设 nums[-1] = nums[n] = -∞。示例 1:输入: nums = [1,2,3,1]
输出: 2
解释: 3 是峰值元素,你的函数应该返回其索引 2。
示例 2:输入: nums = [1,2,1,3,5,6,4]
输出: 1 或 5
解释: 你的函数可以返回索引 1,其峰值元素为 2;或者返回索引 5, 其峰值元素为 6。
说明:你的解法应该是 O(logN) 时间复杂度的。来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-peak-element
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

我的解决方法:

package com.xinyu.test;/*** Created by zy on 2019/4/16.*/
public class TestArray11 {public static void main(String[] args) {System.out.println(findPeakElement2(new int[]{1,2,3,1}));System.out.println(findPeakElement2(new int[]{1,2,3,8,7,9,20,2,9,1}));}/*** 峰值元素是指其值大于左右相邻值的元素。给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。你可以假设 nums[-1] = nums[n] = -∞。示例 1:输入: nums = [1,2,3,1]输出: 2解释: 3 是峰值元素,你的函数应该返回其索引 2。示例 2:输入: nums = [1,2,1,3,5,6,4]输出: 1 或 5解释: 你的函数可以返回索引 1,其峰值元素为 2;或者返回索引 5, 其峰值元素为 6。说明:你的解法应该是 O(logN) 时间复杂度的。*/public static int findPeakElement(int[] nums) {int max = Integer.MIN_VALUE;int maxIndex = 0;for (int i = 0; i < nums.length ; i++) {if (i != 0 || i != nums.length-1) {if (nums[i-1] < nums[i] &&  nums[i] > nums[i+1]) {return i;}}if (nums[i] > max) {max = nums[i];maxIndex = i;}}return maxIndex;}/*** 比较佩服的写法,因为只要求找一个峰值,所以不必一个一个遍历* @param nums* @return*/public static int findPeakElement2(int[] nums) {int l = 0, r = nums.length - 1;while (l < r) {int mid = (l + r) / 2;if (nums[mid] > nums[mid + 1])r = mid;elsel = mid + 1;}return l;}}

比较好的解决方法是findPeakElement2。

因为只要求找一个峰值,所以不必一个一个遍历

算法---------数组-----------寻找峰值相关推荐

  1. 算法系列——寻找峰值 (Find Peak Element)

    题目描述 题目链接:https://leetcode-cn.com/problems/find-peak-element/ A peak element is an element that is g ...

  2. LeetCode琅琊榜第十二层-寻找峰值(爬坡算法)

    LeetCode162.寻找峰值 难度:中等 博主空间与往期力扣  题目链接 目录 作者原始思路 求最大值法(官方解法一) 题目分析 算法思想 代码实现 代码分析: 官方解法 爬坡算法(方法二) 算法 ...

  3. 寻找峰值(局部最大、局部最小)——二分查找

    寻找峰值 也就是局部最大,可以采用二分法来实现.当然局部最小也一样. 峰值元素是指其值严格大于左右相邻值的元素. 给你一个整数数组 nums,找到峰值元素并返回其索引.数组可能包含多个峰值,在这种情况 ...

  4. 11 寻找峰值(Find Peak Element)

    文章目录 1 题目 2 描述 3 思路 3.1 图解 3.2 时间复杂度 3.3 空间复杂度 4 源码 1 题目   寻找峰值(Find Peak Element) lintcode:题号--75,难 ...

  5. leetcode 寻找峰值

    162. 寻找峰值 峰值元素是指其值严格大于左右相邻值的元素. 给你一个整数数组 nums,找到峰值元素并返回其索引.数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可. 你可以假设 ...

  6. 牛客题霸 [ 寻找峰值] C++题解/答案

    牛客题霸 [ 寻找峰值] C++题解/答案 题目描述 山峰元素是指其值大于或等于左右相邻值的元素.给定一个输入数组nums,任意两个相邻元素值不相等,数组可能包含多个山峰.找到索引最大的那个山峰元素并 ...

  7. python 多条件 选择 算法_python部署python算法 - 快速寻找满足条件的两个数

    题目前提是一定存在这样两个数 解法一就不写了...一般想不到吧 一开始想到的是解法二最后的用hash表 (其实是想到创建一个跟target一样大的数组啦..存在就写入index,但是要全部找出,那得二 ...

  8. C ++ 数组 | 寻找最大、最小值,数组(Array)_1

    目录 寻找最大.最小值 数组 寻找最大.最小值 对于这个编程测验,我们将找到用户将输入的15个数字的最小值和最大值以及平均值. #include <iostream>int main() ...

  9. java 寻找峰值峰谷_Java实现 LeetCode 162 寻找峰值

    162. 寻找峰值 峰值元素是指其值大于左右相邻值的元素. 给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引. 数组可能包含多个峰值,在这种情况下,返 ...

最新文章

  1. html,h4,h5的区别,(转)H5和H4的对比听感
  2. Ubuntu系统启动错误问题的解决
  3. 【NOIP2015模拟10.27】魔道研究
  4. 学生管理系统c#语言代码,基于C#语言的学生管理系统的设计(ASP.NET2.0)
  5. 外星人台式电脑_戴尔 XPS 和外星人大更新,一边是生产力,一边是游戏
  6. (39)FPGA原语设计(IDDR)
  7. 数字信号处理-02- FPGA常用运算模块-加减法器和乘法器
  8. LaTeX通用简洁模板
  9. RSG.CFS.v8.0.2 1CD(综合性通用冷弯型钢构件设计工具)
  10. 网络登录计算机密码怎么设置,电脑怎么设置无线网密码?
  11. 计算机在开机时会进行自检遇到,电脑开机自检卡住了怎么办
  12. Ivy Book List
  13. mysql运维备份_MySQL运维经验
  14. ios查看苹果app的下载量,日活,销售情况等相关数据
  15. 离开平凡的生活,你们都是诗人。
  16. 运行时错误-2147024770 或者 word运行时错误424
  17. wxpython表格怎么分页_Word表格跨页断行如何排版?Word表格换页脱节怎么办?
  18. Qt之使用QTreeView实现QQ好友列表
  19. Bt(宝塔面板)安装wordpress以及如何开启最简单实用的动静分离优化
  20. 微信人工客服电话号码是多少

热门文章

  1. linux下 get,Unix/Linux下 getrusage 的用法
  2. 每个c语言程序写完后 都要按照,c语言基础学习小结(习题总结)(5页)-原创力文档...
  3. 雷柏鼠标怎么配对接收器_四款蓝牙鼠标的详细使用体验对比
  4. vb 实现二维数组(矩阵)转置。_笃学不倦|数组的定义
  5. Linux IO多路复用之epoll网络编程(含源码)
  6. VS2015使用scanf报错解决方案
  7. opwnert挂载摄像头
  8. 读取资源文件的工具.
  9. MCollective架构篇4-MCollective各种插件的部署及测试
  10. Web安全测试检查单