Archives
Trending
Support
Login
clear text
XML
Django
JavaScript
MATLAB
C
C++
C#
Python
SQL
Shell
Bash
Markdown
YAML
JSON
HTML
CSS
PHP
Java
Ruby
Go
Rust
Swift
Kotlin
Arduino
TypeScript
Perl
Autohotkey
Lua
SQF
R
Scala
Haskell
Groovy
Dart
Clojure
VB.NET
Objective-C
PowerShell
Bash
CoffeeScript
Verilog
''' given you arr1 and arr2 you can do m operations in each operation from front or back of arr2 pick an element and put it in front or back of arr1 by doing these m operations find out the max subarray sum possible ------------------------------------------------------------------------------------- important thing to be noted here is lets focus on how we can pick out m elements place 2 pointers at start and end of arr2 and pick out m elements with m comparisions once you have popped out m max elements from front or back of the arr2 you need to filter out positive elements from them and form a good sum say in this way you got a good sum 20 now say you were given an array 5 -100 10 you have 2 choices as per question you can put all of those postive (good sum) either at front or back ,you need to try to get the ans as 30 not settle for 25 so the answer would be max(max kadane with goodsum at front ,max kadane with goodsum at back) ''' class Solution: def maxSubArraySumWithMops(self,arr1,arr2,m): #m will be always <= len(arr2) left = 0 right = len(arr2)-1 maxArr2 = [] goodSum = 0 while m and left<=right: if arr2[left]>arr2[right]: maxArr2.append(arr2[left]) left += 1 else: maxArr2.append(arr2[right]) right -= 1 m-=1 for ele in maxArr2: if ele>0: goodSum+=ele temp1 = [ele for ele in arr1] temp2 = [ele for ele in arr1] temp1.insert(goodSum,0) temp2.append(goodSum) maxi = -10**10 print(f"goodsum is {goodSum}") #finding kadane when goodsum placed at left prev = -10**10 for ele in temp1: prev = max(prev+ele,ele,0) maxi = max(maxi,prev) #finding kadane when goodsum placed at right prev = -10**10 for ele in temp2: prev = max(prev+ele,ele,0) maxi = max(maxi,prev) return maxi if __name__ == "__main__": sol = Solution() # Each test case is (arr1, arr2, m) test_cases = [ ([1,3,-5,2,2], [2,3], 2), ([5, -100, 10], [10,10,10], 2), # example from description ([1, 2, 3], [4, 5, 6], 3), # all positive, pick all ([10, -5, 7], [-1, -2, -3], 2), # arr2 all negative ([1, 2, 3, 4], [5, 6, 7, 8], 1), # pick one from arr2 ([0, 0, 0], [1, 2, 3], 2), # arr1 zeros ([1], [2], 1), # single element each ([1, -2, 3], [4, -5, 6], 2), # mixed arr2 ([1, 2, 3], [], 0), # arr2 empty, no ops ([1, 2, 3], [4, 5, 6], 0), # m=0, no ops ([1, 2, 3], [4, 5, 6], 10), # m > len(arr2) ] for idx, (arr1, arr2, m) in enumerate(test_cases, start=1): try: result = sol.maxSubArraySumWithMops(list(arr1), list(arr2), m) except Exception as e: result = f"Error: {e}" print(f"Test case {idx}: arr1={arr1} arr2={arr2} m={m} -> Result: {result}")
Mark as private (unlisted)
for 30 minutes
for 6 hours
for 1 day
for 1 week
for 1 month
for 1 year
everlasting (like CCCP)