Program to find the maximum sum of the subarray modulo by m in Python

Program to find the maximum sum of the subarray modulo by m in Python

Suppose we have an array nums with n elements. We have another integer m. We have to find the maximum value of sum of any of its subarrays modulo m.

So, if the input is like nums = [1,5,7,3] m = 5, then the output will be 3 because

  • [1] mod 5 = 1
  • [5] mod 5 = 0
  • [7] mod 5 = 2
  • [3] mod 5 = 3
  • [1,5] mod 5 = 1
  • [5,7] mod 5 = 2
  • [7,3] mod 5 = 0
  • [1,5,7] mod 5 = 3
  • [5,7,3] mod 5 = 0
  • [1,5,7,3] mod 5 = 1

To solve this, we will follow these steps −

  • csum := a list and initially insert nums[0] mod m into it
  • for each x in nums except first value, do
    • insert (last item of csum + x) mod m at the end of csum
  • seen := a list with single element initially that is 0
  • max_sum := -1
  • for each s in csum, do
    • idx := the left most position to insert s into seen so that the list will be sorted
    • if idx
    • max_sum := maximum of max_sum and s
  • otherwise,
    • insert s at the left most index of seen so that array is sorted
  • insert s at the left most index of seen so that array is sorted
  • return max_sum
  • Example

    Let us see the following implementation to get better understanding −

    import bisect
    def solve(nums, m):
       csum = [nums[0] % m]
       for x in nums[1:]:
          csum.append((csum[-1] + x) % m)
    
       seen = [0]
       max_sum = -1
       for s in csum:
          idx = bisect.bisect_left(seen, s)
          if idx 

    Input

    "pptpp", [(1,1),(1,4),(1,1),(0,2)]

    Output

    3
    Updated on: 2021-10-11T06:35:17+05:30

    319 Views

    Kickstart Your Career

    Get certified by completing the course

    Get Started
    Advertisements