Find Peak Elementspa
A peak element is an element that is greater than its neighbors.code
Given an input array where num[i] ≠ num[i+1]
, find a peak element and return its index.blog
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.element
click to show spoilers.leetcode
Your solution should be in logarithmic complexity.get
這題就是求序列最大值。順序查找或二分查找都可。input
知足複雜度要求的話須要用二分查找。it
解法一:順序查找io
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; } };