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;
        }
    };  

  • 相关阅读:
    克罗内克符号
    子进程和线程
    力扣:数学问题
    iconv装换文件编码格式
    mac 上iterm终端显示中文为乱码解决方案
    Android启动时间测试方法
    Centos4.3安装MySQL-python-1.2.3,出现error: command 'gcc' failed with exit status 1
    java mail发送邮件
    Java通过socket实现smtp协议发送邮件
    vim解决中文显示乱码问题
  • 原文地址:https://www.cnblogs.com/ganganloveu/p/4147655.html
Copyright © 2011-2022 走看看