From 41ca4272cbc96eab421ec5f1858d87e199a54dd3 Mon Sep 17 00:00:00 2001 From: Yasir Qureshi Date: Sun, 18 Sep 2022 23:46:32 +0500 Subject: [PATCH 1/2] finalized questions --- Q1/solution.py | 23 ++++++++++++++++++++++- Q2/solution.py | 26 ++++++++++++++++++++++---- Q3/solution.py | 32 +++++++++++++++++++++++++++++++- 3 files changed, 75 insertions(+), 6 deletions(-) diff --git a/Q1/solution.py b/Q1/solution.py index 4429a19..4fe7e15 100644 --- a/Q1/solution.py +++ b/Q1/solution.py @@ -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(10) +digit_sum = digit_sum_for(factorial) +print(digit_sum) diff --git a/Q2/solution.py b/Q2/solution.py index dd114fb..3b28fd6 100644 --- a/Q2/solution.py +++ b/Q2/solution.py @@ -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 diff --git a/Q3/solution.py b/Q3/solution.py index 18ab591..fc974e3 100644 --- a/Q3/solution.py +++ b/Q3/solution.py @@ -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) From 6e1ed8769eada29c2d59f01e73bd6558e39fa3ee Mon Sep 17 00:00:00 2001 From: Yasir Qureshi <72063772+web-angle@users.noreply.github.com> Date: Sun, 18 Sep 2022 23:55:25 +0500 Subject: [PATCH 2/2] Update solution.py --- Q1/solution.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Q1/solution.py b/Q1/solution.py index 4fe7e15..7628a49 100644 --- a/Q1/solution.py +++ b/Q1/solution.py @@ -17,6 +17,6 @@ def digit_sum_for(number): return total -factorial = get_factorial(10) +factorial = get_factorial(100) digit_sum = digit_sum_for(factorial) print(digit_sum)