- Trending Categories
- Data Structure
- Networking
- RDBMS
- Operating System
- Java
- iOS
- HTML
- CSS
- Android
- Python
- C Programming
- C++
- C#
- MongoDB
- MySQL
- Javascript
- PHP

- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who

# Maximum Sum Path in Two Arrays in C++

## Problem statement

Given two sorted arrays such the arrays may have some common elements. Find the sum of the maximum sum path to reach from beginning of any array to end of any of the two arrays. We can switch from one array to another array only at common elements. Note that the common elements do not have to be at same indexes.

Expected time complexity is O(m+n) where m is the number of elements in arr1[] and n is the number of elements in arrs2[]

## Example

If given input is then output is 35 arr1[] = {2, 3, 7, 10, 12} ar2[] = {1, 5, 7, 8} (1 + 5 + 7 + 10 + 12) = 35

1. We start from first element of arr2 which is 1, then we move to 5, then 7.

From 7, we switch to ar1 (7 is common) and traverse 10 and 12.

## Algorithm

The idea is to do something similar to merge process of merge sort. We need to calculate sums of elements between all common points for both arrays. Whenever we see a common point, we compare the two sums and add the maximum of two to the result.

Initialize result as 0. Also initialize two variables sum1 and sum2 as 0. Here sum1 and sum2 are used to store sum of element in arr1[] and arr2[] respectively. These sums are between two common points

Now run a loop to traverse elements of both arrays. While traversing compare current elements of arr1[] and arr2[]

If current element of arr1[] is smaller than current element of arr2[], then update sum1, else if current element of arr2[] is smaller, then update sum

If current element of arr1[] and arr2[] are same, then take the maximum of sum1 and sum2 and add it to the result. Also add the common element to the result

## Example

#include <bits/stdc++.h> using namespace std; int max(int x, int y){ return (x > y)? x : y; } int maxPathSum(int *arr1, int *arr2, int m, int n){ int i = 0, j = 0; int result = 0, sum1 = 0, sum2 = 0; while (i < m && j < n) { if (arr1[i] < arr2[j]) { sum1 += arr1[i++]; } else if (arr1[i] > arr2[j]) { sum2 += arr2[j++]; } else { result += max(sum1, sum2); sum1 = 0, sum2 = 0; while (i < m && j < n && arr1[i] == arr2[j]) { result = result + arr1[i++]; j++; } } } while (i < m) { sum1 += arr1[i++]; } while (j < n) { sum2 += arr2[j++]; } result += max(sum1, sum2); return result; } int main(){ int arr1[] = {2, 3, 7, 10, 12}; int arr2[] = {1, 5, 7, 8}; int m = sizeof(arr1)/sizeof(arr1[0]); int n = sizeof(arr2)/sizeof(arr2[0]); cout << "Maximum sum path = " << maxPathSum(arr1, arr2, m, n) << endl; return 0; }

## Output

When you compile and execute above program. It generates following output −

Maximum sum path = 35

- Related Questions & Answers
- Maximum Sum of Products of Two Arrays in C++
- Maximum OR sum of sub-arrays of two different arrays in C++
- Maximum path sum in matrix in C++
- Find Sum of pair from two arrays with maximum sum in C++
- Maximum path sum in a triangle in C++
- Maximum Path Sum in a Binary Tree in C++
- Maximum path sum in an Inverted triangle in C++
- Maximum sum by picking elements from two arrays in order in C++ Program
- Binary Tree Maximum Path Sum in Python
- Path Sum III in C++
- Minimum Path Sum in C++
- Path Sum IV in C++
- Maximum sum of a path in a Right Number Triangle in C++
- Maximum sum path in a matrix from top to bottom in C++
- Path with Maximum Gold in C++