标签:discus multi html algo number time question inpu discuss
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.
Your solution should be in logarithmic complexity.
Java Solution:
Runtime beats 31.71%
完成日期:08/31/2017
关键词:Array, Binary search,
关键点:4种可能性来判断峰值的位置
1 class Solution 2 { 3 public int findPeakElement(int[] nums) 4 { 5 int left = 0; 6 int right = nums.length -1; 7 8 while(left < right - 1) 9 { 10 int mid = left + (right - left) / 2; 11 // if find peak number 12 if(nums[mid-1] < nums[mid] && nums[mid] > nums[mid+1]) 13 return mid; 14 else if(nums[mid-1] < nums[mid] && nums[mid] < nums[mid+1]) 15 { // if find ascending three numbers, the peak number must be in [mid+1, n-1] 16 left = mid + 1; 17 } 18 else if(nums[mid-1] > nums[mid] && nums[mid] > nums[mid+1]) 19 { // if find descending three numbers, the peak number must be in [0, mid-1] 20 right = mid - 1; 21 } 22 else if(nums[mid-1] > nums[mid] && nums[mid] < nums[mid+1]) 23 { // if find the mid number is smaller than both neighbors, meaning both sides have peak number 24 right = mid - 1; 25 } 26 } 27 28 return nums[left] > nums[right]? left:right; 29 } 30 }
参考资料:
https://discuss.leetcode.com/topic/5848/o-logn-solution-javacode/14
LeetCode 算法题目列表 - LeetCode Algorithms Questions List
LeetCode 162. Find Peak Element (找到峰值)
标签:discus multi html algo number time question inpu discuss
原文地址:http://www.cnblogs.com/jimmycheng/p/7461421.html