0% found this document useful (0 votes)
3 views

Arrays

Uploaded by

alexendrarose048
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views

Arrays

Uploaded by

alexendrarose048
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 5

Arrays

1. Subarray with given sum


2. Count the triplets
3. Kadane’s Algorithm
4. Missing number in array
5. Merge two sorted arrays
6. Rearrange array alternatively
7. Number of pairs
8. Inversion of Array
9. Sort an array of 0s, 1s and 2s
10. Equilibrium point
11. Leaders in an array
12. Minimum Platforms
13. Reverse array in groups
14. K’th smallest element
15. Trapping Rain Water
16. Pythagorean Triplet
17. Chocolate Distribution Problem
18. Stock buy and sell
19. Element with left side smaller and right side greater
20. Convert array into Zig-Zag fashion
21. Last Index of 1
22. Spirally traversing a matrix
23. Largest Number formed from an Array

Q1 . Subarray with given sum


class Solution:
def subArraySum(self,arr, n, s):
curr_sum = arr[0]
start = 0
i = 1
while i <= n:
while curr_sum > s and start < i - 1:
curr_sum -= arr[start]
start += 1
if curr_sum == s:
return [start + 1, i]
if i < n:
curr_sum += arr[i]
i += 1
return [-1]
Q2 count the triplets (TLE)
class Solution:
def countTriplet(self, arr, n):
count = 0
for i in range(n):
for j in range(i + 1, n):
sum = arr[i] + arr[j]
if sum in arr:
count += 1
return count

Q3 Kadane’s Algorithm
class Solution:
def maxSubArraySum(self,arr,N):
curr_sum = 0
max_sum = arr[0]
for i in range(N):
curr_sum += arr[i]
max_sum = max(max_sum, curr_sum)
if curr_sum < 0: curr_sum = 0
return max_sum

Q4 Missing number in array


class Solution:
def MissingNumber(self,array,n):
Total_sum = n * (n + 1)//2
actual_sum = 0
for i in range(n - 1):
actual_sum += array[i]
return Total_sum - actual_sum

Q5 Merge without extra space (naive method)


class Solution:
def merge(self,arr1,arr2,n,m):
arr = arr1 + arr2
arr.sort()
for i in range(n + m):
if i < n:
arr1[i] = arr[i]
if i >= n:
arr2[i - n] = arr[i]
Optimized method (n * logn)
from math import ceil
class Solution:
def merge(self,arr1,arr2,n,m):
gap = n + m
gap = ceil(gap/2)
while gap > 0:
i = 0
while i + gap < n:
if arr1[i] > arr1[i + gap]:
arr1[i], arr1[i + gap] = \
arr1[i + gap], arr1[i]
i += 1
if gap > n:
j = gap - n
else:
j = 0

while i < n and j < m:


if arr1[i] > arr2[j]:
arr1[i], arr2[j] = \
arr2[j], arr1[i]
i += 1
j += 1

if j < m:
j = 0
while j + gap < m:
if arr2[j] > arr2[j + gap]:
arr2[j], arr2[j + gap] = \
arr2[j + gap], arr2[j]
j += 1
if gap <= 1:
gap = 0
else:
gap = ceil(gap/2)

Q6 Rearrange the array Alternately (naive method)


class Solution:
def rearrange(self,arr, n):
arr1 = arr[:]
k = 0
for i in range(0, n, 2):
arr[i] = arr1[n - 1 - k]
k += 1
k = 0
for i in range(1, n, 2):
arr[i] = arr1[k]
k += 1

Optimized method (formula used)


class Solution:
def rearrange(self,arr, n):
me = arr[n - 1] + 1
i = 0
j = n -1
k = 0
for i in range(n):
if i % 2 == 0:
arr[i] = arr[i] + (arr[j] % me) * me
j -= 1
else:
arr[i] = arr[i] + (arr[k] % me) * me
k += 1

for i in range(n):
arr[i] = arr[i]//me

Q7 Number of pairs
from bisect import bisect_right
class Solution:
def countPairs(self,a,b,M,N):
b.sort()
count_of_0 = bisect_right(b, 0)
count_of_1 = bisect_right(b, 1) - count_of_0
count_of_2 = bisect_right(b, 2) - bisect_right(b,1)

count = 0

for x in a:
if x == 0: continue
elif x == 1:
count += count_of_0
elif x == 2:
count += N - bisect_right(b, 4) + \
count_of_0 + count_of_1
elif x == 3:
count += N - bisect_right(b, 3) + \
count_of_2 + count_of_0 + count_of_1
else:
count += N - bisect_right(b, x) + \
count_of_0 + count_of_1
return count

You might also like