|
| 1 | +# |
| 2 | +# Find last occurance of a number in a sorted array (increasing order) |
| 3 | +# Approach- Binary Search |
| 4 | +# T(n)- O(log n) |
| 5 | +# |
| 6 | + |
| 7 | + |
1 | 8 | def lastOccurance(array, query):
|
2 | 9 | lo, hi = 0, len(array) - 1
|
3 | 10 | while lo <= hi:
|
4 | 11 | mid = lo + (hi - lo) // 2
|
5 | 12 | if (array[mid] == query and mid == len(array)-1) or \
|
6 | 13 | (array[mid] == query and array[mid+1] > query):
|
7 |
| - return mid |
| 14 | + return mid |
8 | 15 | elif (array[mid] <= query):
|
9 | 16 | lo = mid + 1
|
10 | 17 | else:
|
11 | 18 | hi = mid - 1
|
12 | 19 |
|
13 | 20 |
|
14 |
| -array = [1,2,3,3,3,3,4,4,4,4,5,6,6,6] |
15 |
| -print(array) |
16 |
| -print("-----SEARCH-----") |
17 |
| -query = 3 |
18 |
| -print("found last: ", query, " in index:" , lastOccurance(array, query)) |
19 |
| -print("-----SEARCH-----") |
20 |
| -query = 5 |
21 |
| -print("found last: ", query, " in index:" , lastOccurance(array, query)) |
22 |
| -print("-----SEARCH-----") |
23 |
| -query = 7 |
24 |
| -print("found last: ", query, " in index:" , lastOccurance(array, query)) |
25 |
| -print("-----SEARCH-----") |
26 |
| -query = 1 |
27 |
| -print("found last: ", query, " in index:" , lastOccurance(array, query)) |
28 |
| -print("-----SEARCH-----") |
29 |
| -query = -1 |
30 |
| -print("found last: ", query, " in index:" , lastOccurance(array, query)) |
31 |
| -print("-----SEARCH-----") |
32 |
| -query = 9 |
33 |
| -print("found last: ", query, " in index:" , lastOccurance(array, query)) |
34 |
| -print("-----SEARCH-----") |
35 |
| -query = 6 |
36 |
| -print("found last: ", query, " in index:" , lastOccurance(array, query)) |
| 21 | +def main(): |
| 22 | + array = [1, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 6, 6, 6] |
| 23 | + print(array) |
| 24 | + print("-----SEARCH-----") |
| 25 | + query = 3 |
| 26 | + print("found last: ", query, " in index:", lastOccurance(array, query)) |
| 27 | + print("-----SEARCH-----") |
| 28 | + query = 5 |
| 29 | + print("found last: ", query, " in index:", lastOccurance(array, query)) |
| 30 | + print("-----SEARCH-----") |
| 31 | + query = 7 |
| 32 | + print("found last: ", query, " in index:", lastOccurance(array, query)) |
| 33 | + print("-----SEARCH-----") |
| 34 | + query = 1 |
| 35 | + print("found last: ", query, " in index:", lastOccurance(array, query)) |
| 36 | + print("-----SEARCH-----") |
| 37 | + query = -1 |
| 38 | + print("found last: ", query, " in index:", lastOccurance(array, query)) |
| 39 | + print("-----SEARCH-----") |
| 40 | + query = 9 |
| 41 | + print("found last: ", query, " in index:", lastOccurance(array, query)) |
| 42 | + print("-----SEARCH-----") |
| 43 | + query = 6 |
| 44 | + print("found last: ", query, " in index:", lastOccurance(array, query)) |
| 45 | + |
| 46 | +if __name__ == "__main__": |
| 47 | + main() |
0 commit comments