zoukankan      html  css  js  c++  java
  • 【LeetCode】162. Find Peak Element (3 solutions)

    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.

    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.

    click to show spoilers.

    Note:

    Your solution should be in logarithmic complexity.

    这题就是求序列最大值。顺序查找或二分查找均可。

    满足复杂度要求的话需要用二分查找。

    解法一:顺序查找

    class Solution {
    public:
        int findPeakElement(vector<int>& nums) {
            int n = nums.size();
            if(n == 1)
                return 0;
            if(nums[0] > nums[1])
                return 0;
            if(nums[n-1] > nums[n-2])
                return n-1;
            for(int i = 1; i < n-1; i ++)
                if(nums[i] > nums[i-1] && nums[i] > nums[i+1])
                    return i;
        }
    };  

    解法二:二分查找(递归)

    class Solution {
    public:
        int findPeakElement(vector<int>& nums) {
            return Helper(nums, 0, nums.size()-1);
        }
        int Helper(vector<int>& nums, int low, int high)
        {
            if(low == high)
                return low;
            int mid = low + (high-low)/2;
            if(nums[mid] > nums[mid+1])
                return Helper(nums, low, mid);
            else
                return Helper(nums, mid+1, high);
        }
    };  

    解法三:二分查找(迭代)

    class Solution {
    public:
        int findPeakElement(vector<int>& nums) {
            int low = 0;
            int high = nums.size()-1;
            while(low < high)
            {
                int mid = low + (high-low)/2;
                if(nums[mid] > nums[mid+1])
                    high = mid;
                else
                    low = mid+1;
            }
            return low;
        }
    };  

  • 相关阅读:
    POJ 1016 不断压缩字符串判断三种结果
    递归的运行机制简单理解
    模拟链表
    输入两个字符串,不用系统提供的函数strcat,自定义函数将两个字符串连接起来。
    信号量多线程同步
    windows 多线程同步技术
    qsort和sort的区别(转)
    大数阶乘位数
    字符串数组qsort排序
    Safecracker
  • 原文地址:https://www.cnblogs.com/ganganloveu/p/4147655.html
Copyright © 2011-2022 走看看