33 lines
		
	
	
	
		
			597 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			33 lines
		
	
	
	
		
			597 B
		
	
	
	
		
			Python
		
	
	
	
	
	
| from math import floor
 | |
| 
 | |
| def find_magic_index_brute(xs):
 | |
|     for i in range(len(xs)):
 | |
|         if xs[i] == i:
 | |
|             return i
 | |
|     return -1
 | |
| 
 | |
| def mid(lo, hi):
 | |
|     return lo + floor((hi - lo) / 2)
 | |
| 
 | |
| def find_magic_index(xs):
 | |
|     lo, hi = 0, len(xs) - 1
 | |
|     return do_find_magic_index(xs, 0, len(xs) - 1)
 | |
| 
 | |
| def do_find_magic_index(xs, lo, hi):
 | |
|     pass
 | |
| 
 | |
| xss = [
 | |
|     [],
 | |
|     [-1,0,2,4,5,6],
 | |
|     [1,1,1,1,1,5],
 | |
|     [-2,-2,-2,-2,4],
 | |
|     [1,2,3,4,5],
 | |
| ]
 | |
| 
 | |
| for xs in xss:
 | |
|     print(xs)
 | |
|     a = find_magic_index_brute(xs)
 | |
|     b = find_magic_index(xs)
 | |
|     print(a, b)
 | |
|     assert a == b
 | |
|     print("Success!")
 |