-
Notifications
You must be signed in to change notification settings - Fork 0
/
task15.py
31 lines (26 loc) · 1018 Bytes
/
task15.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# coding=utf-8
# За минимальное количество шагов проверить, есть ли в упорядоченной по убыванию
# последовательности a(n) некоторая величина b. Если есть, то указать ее порядковый номер.
def contains(v, arr):
if len(arr) == 0:
return False
# best case :)
if arr[0] < v or arr[-1] > v:
return False
if arr[0] == v or arr[-1] == v:
return True
get_half = lambda l, r: l + (r - l) / 2
left = 0
right = len(arr) - 1
half = get_half(left, right) # left + (right - left) / 2
while half != left and half != right:
# print "l:%d h:%d r:%d" % (left, half, right)
if arr[half] == v:
return True
elif arr[half] > v:
left = half
half = get_half(left, right)
elif arr[half] < v:
right = half
half = get_half(left, right)
return False