g0101_0200.s0162_find_peak_element.Solution Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java21 Show documentation
Show all versions of leetcode-in-java21 Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
package g0101_0200.s0162_find_peak_element;
// #Medium #Top_Interview_Questions #Array #Binary_Search #Algorithm_II_Day_2_Binary_Search
// #Binary_Search_II_Day_12 #2022_06_25_Time_0_ms_(100.00%)_Space_43.5_MB_(12.83%)
/**
* 162 - Find Peak Element\.
*
* Medium
*
* A peak element is an element that is strictly greater than its neighbors.
*
* Given an 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] = -∞`.
*
* 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 valid `i`.
**/
public class Solution {
public int findPeakElement(int[] nums) {
int start = 0;
int end = nums.length - 1;
while (start < end) {
// This is done because start and end might be big numbers, so it might exceed the
// integer limit.
int mid = start + ((end - start) / 2);
if (nums[mid + 1] > nums[mid]) {
start = mid + 1;
} else {
end = mid;
}
}
return start;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy