Skip to content

Commit e7c26eb

Browse files
Add files via upload
1 parent aa90f11 commit e7c26eb

File tree

3 files changed

+85
-0
lines changed

3 files changed

+85
-0
lines changed

Week 4/Binary Search.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
seq = [int(i) for i in input().split()]
2+
search_seq = [int(i) for i in input().split()]
3+
n = seq[0]
4+
seq = seq[1:]
5+
6+
def binary_search(seq, elt, r):
7+
l = 0
8+
while l<=r:
9+
m = (l+r)//2
10+
if elt > seq[m]:
11+
l = m + 1
12+
elif elt < seq[m]:
13+
r = m - 1
14+
else:
15+
return m
16+
return -1
17+
18+
soln = list()
19+
for i in search_seq[1:]:
20+
ans = binary_search(seq, i, n-1)
21+
soln.append(ans)
22+
print(' '.join([str(i) for i in soln]))

Week 4/Inversion.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
def merge(left, right):
2+
i, j, inversion_counter = 0, 0, 0
3+
final = list()
4+
while i < len(left) and j< len(right):
5+
if left[i] <= right[j]:
6+
final.append(left[i])
7+
i += 1
8+
else:
9+
final.append(right[j])
10+
inversion_counter += len(left) - i
11+
j += 1
12+
13+
final += left[i:]
14+
final += right[j:]
15+
16+
return final, inversion_counter
17+
18+
def mergesort(arr):
19+
global tot_count
20+
if len(arr) <= 1:
21+
return arr
22+
mid = len(arr)//2
23+
24+
left = mergesort(arr[:mid])
25+
right = mergesort(arr[mid:])
26+
27+
sorted_arr, temp = merge(left, right)
28+
tot_count += temp
29+
30+
return sorted_arr
31+
32+
tot_count = 0
33+
n = int(input())
34+
seq = [int(i) for i in input().split()]
35+
mergesort(seq)
36+
print(tot_count)

Week 4/Majority Elements.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
n = int(input())
2+
seq = [int(i) for i in input().split()]
3+
4+
5+
def divide_func(seq, l, r):
6+
if l+1==r:
7+
return seq[l]
8+
elif l+2==r:
9+
return seq[l]
10+
m = (l+r)//2
11+
left = divide_func(seq, l, m)
12+
right = divide_func(seq, m, r)
13+
14+
c1, c2 = 0, 0
15+
for i in seq[l:r]:
16+
if i == left:
17+
c1+=1
18+
elif i == right:
19+
c2+=1
20+
if c1>(r-l)//2 and left != -1:
21+
return left
22+
elif c2>(r-l)//2 and right != -1:
23+
return right
24+
else:
25+
return -1
26+
27+
print(int(divide_func(seq, 0, n) != -1))

0 commit comments

Comments
 (0)