-
Notifications
You must be signed in to change notification settings - Fork 2
Leetcode: Common MAANG Coding QNA
Praveen Kumar Anwla edited this page Feb 14, 2024
·
1 revision
Q1. Write a function that takes an array of integers heights, where each element represents the height of a bar at position i. The function should return an integer representing the total amount of rainwater that can be trapped between the bars.
Ans:
def trap_rain_water_prob(heights):
#Basecase
if len(heights) <= 2:
return 0
# Find left and right max values
left_max_val = [0] * len(heights)
right_max_val = [0] * len(heights)
for i in range(1, len(heights)): # Starting from 1 coz at index 0, left_max_val=0 is already initialized
left_max_val[i] = max(left_max_val[i-1], heights[i-1])
for i in range(len(heights)-2, -1, -1): # start from right side of heights array
right_max_val[i] = max(right_max_val[i+1], heights[i+1])
# Find the traped water
traped_water = 0
for i in range(1, len(heights)-1):
if min(left_max_val[i], right_max_val[i]) > heights[i]:
traped_water += min(left_max_val[i], right_max_val[i])-heights[i]
return traped_water
print(trap_rain_water_prob([1, 0, 2, 1, 3, 1, 2, 0, 3])) # Output: 8
Q2. Implement a function that takes a list of integers nums as input and reverses the order of its elements in-place. The function should modify the original list without using additional memory.
Ans:
def reverse_data(nums):
start_idx, end_idx = 0, len(nums)-1
while end_idx > start_idx:
nums[start_idx], nums[end_idx] = nums[end_idx], nums[start_idx]
start_idx += 1
end_idx -= 1
return nums
nums = [1, 2, 3, 4, 5]
print(reverse_data(nums))
Ans:
def reverse_data(data):
data = list(data)
start_idx, end_idx = 0, len(data)-1
while end_idx > start_idx:
data[start_idx], data[end_idx] = data[end_idx], data[start_idx]
start_idx += 1
end_idx -= 1
return ''.join(data)
def palindrome_check(data):
reversed_data = reverse_data(data)
if data == reversed_data:
return True
return False
print(palindrome_check('madam'))
Ans:
def anagram_check(string1, string2):
if len(string1) != len(string2):
return False
string1 = sorted(string1)
string2 = sorted(string2)
print("string1 :", string1, "string2 :", string2)
if string1 != string2:
return False
return True
s1 = 'listen'
s2 = 'silent'
print(anagram_check(s1, s2))
Ans:
def reverse_int(n):
reversed_int = 0
while n > 0:
remainder = n % 10
reversed_int = reversed_int*10 + remainder
n = n // 10
return reversed_int
print(reverse_int(12345678))