Find in Mountain Array LeetCode solution in Python

1
# """
2
# This is MountainArray's API interface.
3
# You should not implement it, or speculate about its implementation
4
# """
5
# class MountainArray:
6
# def get(self, index: int) -> int:
7
# def length(self) -> int:
8

9

10
class Solution:
11
def findInMountainArray(self, target: int, mountain_arr: "MountainArray") -> int:
12
min_index = -1
13
peak = self.findpeak(mountain_arr)
14

15
min_index = self.binary_search(0, peak, mountain_arr, target, 1)
16
if min_index == -1:
17
min_index = self.binary_search(
18
peak + 1, mountain_arr.length() - 1, mountain_arr, target, -1
19
)
20
return min_index
21

22
def findpeak(self, mountain_arr):
23
start = 0
24
end = mountain_arr.length() - 1
25
while start < end:
26
mid = start + int((end - start) / 2)
27
if mountain_arr.get(mid) < mountain_arr.get(mid + 1):
28
start = mid + 1
29
else:
30
end = mid
31

32
return start
33

34
def binary_search(self, start, end, mountain_arr, target, asc):
35
while start <= end:
36
mid = start + int((end - start) / 2)
37
mountain_arr_get_mid = mountain_arr.get(mid)
38
if target == mountain_arr_get_mid:
39
return mid
40
if asc == 1:
41
if target < mountain_arr_get_mid:
42
end = mid - 1
43
elif target > mountain_arr_get_mid:
44
start = mid + 1
45
else:
46
if target < mountain_arr_get_mid:
47
start = mid + 1
48
elif target > mountain_arr_get_mid:
49
end = mid - 1
50

51
return -1

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0