162. Find Peak Element (Solution || Leetcode medium || Java)
A peak element is an element that is strictly greater than its neighbors.
Given a 0-indexed integer array nums
, find a peak element, and return its index. If the array contains multiple peaks, return the index to any of the peaks.
You may imagine that nums[-1] = nums[n] = -∞
. In other words, an element is always considered to be strictly greater than a neighbor that is outside the array.
You must write an algorithm that runs in O(log n)
time.
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: 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.
Constraints:
1 <= nums.length <= 1000
-231 <= nums[i] <= 231 - 1
nums[i] != nums[i + 1]
for all validi
.
SOLUTION 1:
class Solution {
public int findPeakElement(int[] nums) {
if(nums.length < 2 || nums[0] > nums[1]){
return 0;
}
if(nums[nums.length — 1] > nums[nums.length — 2]){
return nums.length — 1;
}
int start = 1;
int end = nums.length — 2;
while(start <= end){
if(nums[start] > nums[start + 1]){
return start;
}else{
start += 1;
}
if(nums[end] > nums[end — 1]){
return end;
}else{
end -= 1;
}
}
return -1;
}
}
NOTE:
I saw a solution on web and according to me that solution is not exact but leetcode is saying
Runtime: 0 ms, faster than 100.00% of Java online submissions for Find Peak Element.
Memory Usage: 42.5 MB, less than 70.96% of Java online submissions for Find Peak Element.
As it is given in the question that “A peak element is an element that is strictly greater than its neighbors”, it means not equal but the element must be greater. So, this solution fails in my input that is : [1,2,1,3,5,5,5]
The solution:
class Solution {
public int findPeakElement(int[] nums) {
int i = 0, j = nums.length — 1;
while (i < j) {
int m = i + (j — i) / 2;
if (nums[m] > nums[m + 1]) j = m;
else i = m + 1;
}
return i;
}
}
[If I am wrong then please, please, please correct me]
Thank you for reading. If you have any queries, please let me know in the comment section, I will surely response toward it.