Middle-题目40:162. Find Peak Element

原创 2016年05月31日 16:01:52

题目原文:
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.
题目大意:
寻找一个数组的峰值元素(类似于函数中的极大值)
假设num[-1]=num[n]=- ∞。
若数组中有多个峰值元素,返回任意一个都可以。
题目分析:
本题依然是一个二分查找的变形。先考虑边界情况,若数组只有1个元素,则他就是峰值;若数组只有两个元素则较大的就是峰值元素。
接下来进行二分查找,设中点为mid,考虑以下情况:
(1) mid是端点,那么只看它是否大于第二个点(倒数第二个点)即可;
(2) mid点的值大于左边又大于右边,则它就是峰值,返回即可;
(3) mid点的“邻域”是递增的,则右半边一定有峰值;
(4) mid点的“邻域”是递减的,则左半边一定有峰值;
源码:(language:c)

int findPeakElement(int* nums, int numsSize) {
    if(numsSize == 1) 
        return 0;
    else if(numsSize == 2)
        return nums[0]<nums[1];
    else {
        int mid=(numsSize-1)/2;
        if(mid == 0 && nums[0]>nums[1])
            return 0;
        else if(mid == numsSize-1 && nums[numsSize-1] > nums[numsSize-2])
            return numsSize-1;
        else if(nums[mid] > nums[mid-1] && nums[mid] > nums[mid+1])
            return mid;
        else if(nums[mid] >= nums[mid-1] && nums[mid] <= nums[mid+1])
            return findPeakElement(&nums[mid+1],numsSize-mid-1)+mid+1;
        else 
            return findPeakElement(nums,numsSize-mid-1);
    }
}

成绩:
0ms,beats 9.38%,众数0ms,90.62%
cmershen的碎碎念:
二分查找不一定只适用于有序的数组。像本题的数组是不知道顺序的,但适用二分查找。

版权声明:完整版Leetcode题解请出门左转https://github.com/cmershen1/leetcode/tree/master/docs

LeetCode(162) Find Peak Element

题目如下: A peak element is an element that is greater than its neighbors. Given an input array where nu...
  • feliciafay
  • feliciafay
  • 2015年01月01日 16:36
  • 2007

leetcode 162. Find Peak Element-查找峰元素|二分查找

原题链接:162. Find Peak Element 【思路-Java、Python】 二分查找 题目中已经说明,最左端和最右端元素均无限小,中间元素比两侧都要大,那么本题中一定存在一个峰元素。...
  • happyaaaaaaaaaaa
  • happyaaaaaaaaaaa
  • 2016年06月05日 16:47
  • 1917

Leetcode_162_Find Peak Element

本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/43415313 A peak element is...
  • pistolove
  • pistolove
  • 2015年02月02日 21:04
  • 1155

162. Find Peak Element**

A peak element is an element that is greater than its neighbors. Given an input array where num[i] ...
  • alwaystry
  • alwaystry
  • 2017年01月10日 10:51
  • 74

162. Find Peak Element

A peak element is an element that is greater than its neighbors. Given an input array where num[i] ≠...
  • wusecaiyun
  • wusecaiyun
  • 2015年08月25日 15:42
  • 209

162. Find Peak Element 题解

162. Find Peak Element 题解 题目描述: A peak element is an element that is greater than its neighbo...
  • yijingzhi
  • yijingzhi
  • 2017年03月30日 20:26
  • 257

162. Find Peak Element LeetCode

题意:寻找波峰。即num[i - 1] < num[i] > num[i + 1].返回任意一个即可。 题解:直接找。class Solution { public: int findPea...
  • youthinkwu
  • youthinkwu
  • 2016年02月15日 19:12
  • 123

[LeetCode] 162. Find Peak Element

LeetCode 二分法
  • hiimdaosui
  • hiimdaosui
  • 2016年09月13日 12:26
  • 78

162. Find Peak Element(二分)

https://leetcode.com/problems/find-peak-element/description/ 题目:给定一个整型数组,从中找出某一个元素,使得该元素比其左右元素都大,求该...
  • tangyuanzong
  • tangyuanzong
  • 2018年02月02日 14:27
  • 18

LeetCode:162. Find Peak Element

A peak element is an element that is greater than its neighbors. Given an input array where num[i...
  • u012655441
  • u012655441
  • 2017年03月25日 18:33
  • 127
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Middle-题目40:162. Find Peak Element
举报原因:
原因补充:

(最多只允许输入30个字)