Skip to content
This repository was archived by the owner on May 13, 2026. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 22 additions & 1 deletion Q1/solution.py
Original file line number Diff line number Diff line change
@@ -1 +1,22 @@
## Add code below with answer clearly stated
def get_factorial(number):
"""Returns Factorial of number, with trailing zeros removed because they don't contribute to the sum"""
fact = 1
for num in range(2, number + 1):
fact *= num
if num % 5 == 0:
while fact % 10 == 0:
fact //= 10
return fact


def digit_sum_for(number):
"""Returns the sum of the all digits of a number"""
total = 0
for digit in str(number):
total += int(digit)
return total


factorial = get_factorial(100)
digit_sum = digit_sum_for(factorial)
print(digit_sum)
26 changes: 22 additions & 4 deletions Q2/solution.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,26 @@
from typing import Optional


# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next


class Solution:
def removeNthFromEnd(self, head: Optional[ListNode], n: int) -> Optional[ListNode]:
fast = slow = head
for index in range(n):
fast = fast.next

if not fast:
return head.next

while fast.next:
fast = fast.next
slow = slow.next

slow.next = slow.next.next
return head

32 changes: 31 additions & 1 deletion Q3/solution.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,33 @@
from typing import List


class Solution:
def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:

length = len(nums1) + len(nums2)
if length % 2 == 1: # if merged array has odd length return middle element
return self.findMedian(nums1, nums2, length // 2)
else: # if even length then return (middle + middle - 1)/2
return (self.findMedian(nums1, nums2, length // 2) + self.findMedian(nums1, nums2, length // 2 - 1)) / 2

def findMedian(self, nums1, nums2, mid):
if not nums1: # if first array is empty just consider second array
return nums2[mid]
if not nums2:
return nums1[mid]
i_nums1, i_nums2 = len(nums1) // 2, len(nums2) // 2
m_nums1, m_nums2 = nums1[i_nums1], nums2[i_nums2]

# if mid is bigger than the sum of nums1 and nums2's median indices
if i_nums1 + i_nums2 < mid:
# if nums1's median is bigger than nums2's, nums2's first half doesn't include mid
if m_nums1 > m_nums2:
return self.findMedian(nums1, nums2[i_nums2 + 1:], mid - i_nums2 - 1)
else:
return self.findMedian(nums1[i_nums1 + 1:], nums2, mid - i_nums1 - 1)
# when mid is smaller than the sum of nums1 and nums2's indices
else:
# if nums1's median is bigger than nums2's, nums1's second half doesn't include mid
if m_nums1 > m_nums2:
return self.findMedian(nums1[:i_nums1], nums2, mid)
else:
return self.findMedian(nums1, nums2[:i_nums2], mid)