From 0f02ef8e650680114997423118ec9a4e59f633f8 Mon Sep 17 00:00:00 2001 From: Matej Focko Date: Mon, 19 Aug 2024 21:19:11 +0200 Subject: [PATCH] =?UTF-8?q?go:=20add=20=C2=AB162.=20Find=20Peak=20Element?= =?UTF-8?q?=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Matej Focko --- go/find-peak-element.go | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 go/find-peak-element.go diff --git a/go/find-peak-element.go b/go/find-peak-element.go new file mode 100644 index 0000000..bfcf169 --- /dev/null +++ b/go/find-peak-element.go @@ -0,0 +1,31 @@ +package main + +func findPeakElement(nums []int) int { + length := len(nums) + + check := func(i int) bool { + return (i == 0 || nums[i-1] < nums[i]) && (i == length-1 || nums[i] > nums[i+1]) + } + + if check(0) { + return 0 + } else if check(length - 1) { + return length - 1 + } + + left, right := 1, length-2 + + for left <= right { + mid := (left + right) / 2 + + if check(mid) { + return mid + } else if nums[mid] < nums[mid-1] { + right = mid - 1 + } else if nums[mid] < nums[mid+1] { + left = mid + 1 + } + } + + panic("unreachable: peak element is guaranteed") +}