leetcode 162. 寻找峰值

https://leetcode-cn.com/problems/find-peak-element/

官方解答

遍历

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

递归二分

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

迭代二分

class Solution {
public:
    int findPeakElement(vector& nums) {
        int l = 0;
        int r = nums.size()-1;
        while(l nums[mid+1])
                r = mid;
            else
                l = mid + 1;                
        }
        
        return l;
    }
};

 

你可能感兴趣的:(面试算法,leetcode)