arcbjorn

thoughtbook

RSS Feed

Saturday, February 25, 2023

Find peak element

Leetcode 162 problem.

Go

  • Time complexity: O(log(n))O(log(n)) - n is a length of an array
  • Auxiliary space: O(1)O(1) - constant amount of space
func findPeakElement(nums []int) int {
    left := 0
    right := len(nums) - 1

    if right == 0 {
        return 0
    }

    // first element
    if nums[left] > nums[left + 1] {
        return left
    }

    // last element
    if nums[right] > nums[right - 1] {
        return right
    }

    // iterating over all
    for left < right {
        mid := left + (right - left) / 2

        if nums[mid] > nums[mid - 1] && nums[mid] > nums[mid + 1] {
            return mid
        }

        if nums[mid] > nums[mid - 1] {
            left = mid
            continue
        }
        
        right = mid
    }

    return left
}
Creative Commons Licence