zoukankan      html  css  js  c++  java
  • Leetcode162. Find Peak Element寻找峰值

    示例 2:

    输入: nums = [1,2,1,3,5,6,4] 输出: 1 或 5 解释: 你的函数可以返回索引 1,其峰值元素为 2;   或者返回索引 5, 其峰值元素为 6。

    说明:

    你的解法应该是 O(logN) 时间复杂度的。

    二分法:

    如果中间的是峰值直接返回,如果不是,那么两边较大的那一侧是存在峰值的。

    class Solution {
    public:
        int findPeakElement(vector<int>& nums) 
        {
            int len = nums.size();
            if(len == 1)
                return 0;
            int low = 0;
            int high = len - 1;
            while(low <= high)
            {
                int mid = (low + high) / 2;
                if(mid == 0 || mid == len - 1)
                {
                    if(mid == 0)
                    {
                        if(nums[mid] > nums[mid + 1])
                            return mid;
                        else
                            low = mid + 1;
                    }
                    else if(mid == len - 1)
                    {
                        if(nums[mid] > nums[mid - 1])
                            return mid;
                        else
                            high = mid - 1;
                    }
                }
                else if(nums[mid] > nums[mid - 1] && nums[mid] > nums[mid + 1])
                {
                    return mid;
                }
                else
                {
                    if(nums[mid - 1] > nums[mid + 1])
                    {
                        high = mid - 1;
                    }
                    else
                    {
                        low = mid + 1;
                    }
                }
            }
            return -1;
        }
    };
  • 相关阅读:
    构造方法
    linux操作系统基础篇(四)
    linux操作系统基础篇(三)
    linux操作系统基础篇(二)
    linux操作系统基础篇(一)
    计算机网络基础
    计算机操作系统
    计算机基础!
    Open vSwitch intro
    Less(11)
  • 原文地址:https://www.cnblogs.com/lMonster81/p/10433832.html
Copyright © 2011-2022 走看看