算法---------数组-----------寻找峰值
题目描述:
峰值元素是指其值大于左右相邻值的元素。给定一个输入数组 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。
因为只要求找一个峰值,所以不必一个一个遍历
算法---------数组-----------寻找峰值相关推荐
- 算法系列——寻找峰值 (Find Peak Element)
题目描述 题目链接:https://leetcode-cn.com/problems/find-peak-element/ A peak element is an element that is g ...
- LeetCode琅琊榜第十二层-寻找峰值(爬坡算法)
LeetCode162.寻找峰值 难度:中等 博主空间与往期力扣 题目链接 目录 作者原始思路 求最大值法(官方解法一) 题目分析 算法思想 代码实现 代码分析: 官方解法 爬坡算法(方法二) 算法 ...
- 寻找峰值(局部最大、局部最小)——二分查找
寻找峰值 也就是局部最大,可以采用二分法来实现.当然局部最小也一样. 峰值元素是指其值严格大于左右相邻值的元素. 给你一个整数数组 nums,找到峰值元素并返回其索引.数组可能包含多个峰值,在这种情况 ...
- 11 寻找峰值(Find Peak Element)
文章目录 1 题目 2 描述 3 思路 3.1 图解 3.2 时间复杂度 3.3 空间复杂度 4 源码 1 题目 寻找峰值(Find Peak Element) lintcode:题号--75,难 ...
- leetcode 寻找峰值
162. 寻找峰值 峰值元素是指其值严格大于左右相邻值的元素. 给你一个整数数组 nums,找到峰值元素并返回其索引.数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可. 你可以假设 ...
- 牛客题霸 [ 寻找峰值] C++题解/答案
牛客题霸 [ 寻找峰值] C++题解/答案 题目描述 山峰元素是指其值大于或等于左右相邻值的元素.给定一个输入数组nums,任意两个相邻元素值不相等,数组可能包含多个山峰.找到索引最大的那个山峰元素并 ...
- python 多条件 选择 算法_python部署python算法 - 快速寻找满足条件的两个数
题目前提是一定存在这样两个数 解法一就不写了...一般想不到吧 一开始想到的是解法二最后的用hash表 (其实是想到创建一个跟target一样大的数组啦..存在就写入index,但是要全部找出,那得二 ...
- C ++ 数组 | 寻找最大、最小值,数组(Array)_1
目录 寻找最大.最小值 数组 寻找最大.最小值 对于这个编程测验,我们将找到用户将输入的15个数字的最小值和最大值以及平均值. #include <iostream>int main() ...
- java 寻找峰值峰谷_Java实现 LeetCode 162 寻找峰值
162. 寻找峰值 峰值元素是指其值大于左右相邻值的元素. 给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引. 数组可能包含多个峰值,在这种情况下,返 ...
最新文章
- html,h4,h5的区别,(转)H5和H4的对比听感
- Ubuntu系统启动错误问题的解决
- 【NOIP2015模拟10.27】魔道研究
- 学生管理系统c#语言代码,基于C#语言的学生管理系统的设计(ASP.NET2.0)
- 外星人台式电脑_戴尔 XPS 和外星人大更新,一边是生产力,一边是游戏
- (39)FPGA原语设计(IDDR)
- 数字信号处理-02- FPGA常用运算模块-加减法器和乘法器
- LaTeX通用简洁模板
- RSG.CFS.v8.0.2 1CD(综合性通用冷弯型钢构件设计工具)
- 网络登录计算机密码怎么设置,电脑怎么设置无线网密码?
- 计算机在开机时会进行自检遇到,电脑开机自检卡住了怎么办
- Ivy Book List
- mysql运维备份_MySQL运维经验
- ios查看苹果app的下载量,日活,销售情况等相关数据
- 离开平凡的生活,你们都是诗人。
- 运行时错误-2147024770 或者 word运行时错误424
- wxpython表格怎么分页_Word表格跨页断行如何排版?Word表格换页脱节怎么办?
- Qt之使用QTreeView实现QQ好友列表
- Bt(宝塔面板)安装wordpress以及如何开启最简单实用的动静分离优化
- 微信人工客服电话号码是多少
热门文章
- linux下 get,Unix/Linux下 getrusage 的用法
- 每个c语言程序写完后 都要按照,c语言基础学习小结(习题总结)(5页)-原创力文档...
- 雷柏鼠标怎么配对接收器_四款蓝牙鼠标的详细使用体验对比
- vb 实现二维数组(矩阵)转置。_笃学不倦|数组的定义
- Linux IO多路复用之epoll网络编程(含源码)
- VS2015使用scanf报错解决方案
- opwnert挂载摄像头
- 读取资源文件的工具.
- MCollective架构篇4-MCollective各种插件的部署及测试
- Web安全测试检查单