All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g0101_0200.s0162_find_peak_element.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
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