-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDP_magic_index.py
38 lines (31 loc) · 977 Bytes
/
DP_magic_index.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
32
33
34
35
36
37
38
# Magic Index (CtCI/Chapter_8/8.3)
'''
A magic index in an array A[0...n-1] is defined to be an index such thhat A[i] = i.
Given a sorted array of distinct integers, write a method to find a magic index, if one exists
Follow up: what if the values are not distinct?
'''
a = [-10, -8, 0, 3, 7, 7, 8, 10, 11, 12]
b = []
for i in range(len(a)):
b.append(i)
def find_magic_index(a, b):
mid = len(a)//2
if a[mid] < b[mid]:
return find_magic_index(a[mid:], b[mid:])
elif a[mid] > b[mid]:
return find_magic_index(a[:mid], b[:mid])
else:
return a[mid]
print(find_magic_index(a, b))
a = [-10, -8, 0, 1, 2, 3, 6, 8]
def MagicIndex(array, min, max):
mid = (max + min) / 2
print('mid: ')
print(mid)
if array[mid] == mid:
return mid
if array[mid] < mid:
return MagicIndex(array, mid + 1, max)
if array[mid] > mid:
return MagicIndex(array, min, mid - 1)
print MagicIndex(a, 0, len(a) - 1)