写点什么

【LeetCode】寻找峰值 Java 题解

用户头像
HQ数字卡
关注
发布于: 1 小时前

题目描述

峰值元素是指其值严格大于左右相邻值的元素。


给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。


你可以假设 nums[-1] = nums[n] = -∞ 。


你必须实现时间复杂度为 O(log n) 的算法来解决此问题。



示例 1:
输入:nums = [1,2,3,1]输出:2解释:3 是峰值元素,你的函数应该返回其索引 2。
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/find-peak-element著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
复制代码

思路分析

  • 今天的每日一题,题目容易理解,首先可以通过朴素算法求解。

  • 由于题目要求时间复杂度为 O(log n) 的算法,联想到二分查找算法。根据题意,比较相邻的两个数,代码如下:

通过代码

class Solution {    public int findPeakElement(int[] nums) {        int n = nums.length;        int left = 0;        int right = n - 1;        while (left < right) {            int mid = left + (right - left) / 2;            if (nums[mid] < nums[mid + 1]) {                left = mid + 1;            } else {                right = mid;            }        }
return left; }}
复制代码

总结

  • 二分解法的时间复杂度是 O(log n), 空间复杂度是 O(1)

  • 坚持算法每日一题,加油!

发布于: 1 小时前阅读数: 3
用户头像

HQ数字卡

关注

还未添加个人签名 2019.09.29 加入

LeetCode,略懂后端的RD

评论

发布
暂无评论
【LeetCode】寻找峰值Java题解