leetcode之Find Peak Element 问题

问题描述:

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] = -∞.

For example, in array [1, 2, 3, 1], 3 is a peak element and your function should return the index number 2.

注意加粗的那句话,数组中可能有很多个解,只需要找到其中一个就可以了

示例:就直接看上面的例子就可以理解了,题目要找的就是局部最大值,返回的是它的索引值。

问题来源:Find Peak Element (详细地址:https://leetcode.com/problems/find-peak-element/#/description)

思路:题目意思很好理解吧,这道题可以采用两种解法,相信很多人都能马上就想到了,具体如下:

    一)可以采用二分查找,而二分查找又可以是递归的和不是递归的,在这我只给出不递归的了。简单说一下如何查找:

           <1>可以比较nums[mid]和nums[mid + 1]的值大小,然后调整指针,具体是这样的;如果nums[mid] < nums[mid + 1],说明大于左边已经满足了,只要它右边的也比它小就可以了,所以令 low = mid + 1;相反说明右半部分找到了,下面找左半部分,那就令high = mid;

            <2>最后只需要返回low的索引(因为局部最大值存在的话,就是low=high的时候,直接返回low即可,当然返回high也是对的)就可以了,无需返回具体它指向的数值。

    二)在这更推荐的是顺序查找,没错,你听的没错,在这直接采用顺序查找比较容易,因为题目只需要找到一个就可以了。那么我们可以着第一个啊,只需要从左往右遍历,找到第一个nums[i] > nums[i + 1]的就可以了。

代码:上半部分采用的是二分查找,而下面采用的是顺序查找









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值