leetcode FindPeakElement
z
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public class FindPeakElement {
/**
* A peak element is an element that is greater than its neighbors.
*
* Given an input array nums, where nums[i] ≠ nums[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 nums[-1] = nums[n] = -∞.
*
* Example 1:
*
* Input: nums = [1,2,3,1]
* Output: 2
* Explanation: 3 is a peak element and your function should return the index number 2.
* Example 2:
*
* Input: nums = [1,2,1,3,5,6,4]
* Output: 1 or 5
* Explanation: Your function can return either index number 1 where the peak element is 2,
* or index number 5 where the peak element is 6.
* Note:
*
* Your solution should be in logarithmic complexity.
*/
public int findPeakElement(int[] nums) {
int left = 0;
int right = nums.length-1;
while (left < right) {
int mid = (left + right)/2;
if ( !((mid-1>=0 && nums[mid]<nums[mid-1]) || (mid+1<nums.length && nums[mid] < nums[mid+1]))) {
return mid;
}
if (mid-1>=0 && nums[mid-1] > nums[mid]){
right = mid-1;
}
else if (mid+1>nums.length && nums[mid+1]>nums[mid]) {
left = mid+1;
}
}
return left;
}
}