标签:
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.
The array may contain multiple peaks, in that case return the index to any one of the peaks is fine.
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.
求一个数组的峰点下标,也就是这个数组的值大于他旁边的值。若有很多个峰值,责任选一个输出就行。
class Solution { public: int findPeakElement(vector<int>& nums) { if(nums.size()==0) return -1; if(nums.size()==1) return 0; if(nums[0]>nums[1]) return 0; int n=nums.size(); if(nums[n-2]<nums[n-1]) 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) { if(nums.size()==0) return -1; if(nums.size()==1) return 0; if(nums[0]>nums[1]) return 0; int n=nums.size(); if(nums[n-2]<nums[n-1]) return n-1; for(int i=1;i<n;i++) { if(nums[i]<nums[i-1]) return i-1; } return n-1; } };
class Solution { public: int findPeakElement(vector<int>& nums) { if(nums.size()==0) return -1; if(nums.size()==1) return 0; if(nums[0]>nums[1]) return 0; int n=nums.size(); if(nums[n-2]<nums[n-1]) return n-1; int left=0; int right=n-1; while(left<=right) { int mid=(left+right)/2; if(left==right) return left; if(nums[mid]<nums[mid+1]) left=mid+1; else right=mid; } } };
标签:
原文地址:http://blog.csdn.net/sinat_24520925/article/details/46491441