
- C++ Basics
- C++ Home
- C++ Overview
- C++ Environment Setup
- C++ Basic Syntax
- C++ Comments
- C++ Data Types
- C++ Variable Types
- C++ Variable Scope
- C++ Constants/Literals
- C++ Modifier Types
- C++ Storage Classes
- C++ Operators
- C++ Loop Types
- C++ Decision Making
- C++ Functions
- C++ Numbers
- C++ Arrays
- C++ Strings
- C++ Pointers
- C++ References
- C++ Date & Time
- C++ Basic Input/Output
- C++ Data Structures
- C++ Object Oriented
- C++ Classes & Objects
- C++ Inheritance
- C++ Overloading
- C++ Polymorphism
- C++ Abstraction
- C++ Encapsulation
- C++ Interfaces
Maximum sum bitonic subarray in C++
In this problem, we are given an array arr[]. Our task is to create a program to find the maximum sum bitonic subarray in C++.
Bitonic Subarray is a special subarray in which the element strictly increase first and then strictly decreases after reaching a certain point.
Let’s take an example to understand the problem,
Input
arr[] = {4, 2, 3, 7 ,9, 6, 3, 5, 1}
Output
30
Explanation
The bitonic subarray is [2, 3, 7, 9, 6, 3]. Sum = 2 + 3 + 7 + 9 + 6 + 3 = 30
Solution Approach
The solution is similar to that in the bitonic subsequence problem. We will create two arrays incSubArr[] and decSubArr[]. That will create store increasing and decreasing subarrays. At index i, incSubArr[i] will find increasing subarray from 0 to i. And decSubArr[i] will find increasing subarray from i to N.
The maxSum is the maximum value calculated as (incSubArr[i] + decSubArr[i] - arr[i]).
Example
Program to illustrate the working of our solution,
#include <iostream> using namespace std; int findMaxSumBiTonicSubArr(int arr[], int N){ int incSubArr[N], decSubArr[N]; int max_sum = -1; incSubArr[0] = arr[0]; for (int i=1; i<N; i++) if (arr[i] > arr[i-1]) incSubArr[i] = incSubArr[i-1] + arr[i]; else incSubArr[i] = arr[i]; decSubArr[N-1] = arr[N-1]; for (int i= (N-2); i>=0; i--) if (arr[i] > arr[i+1]) decSubArr[i] = decSubArr[i+1] + arr[i]; else decSubArr[i] = arr[i]; for (int i=0; i<N; i++) if(max_sum < (incSubArr[i] + decSubArr[i] - arr[i])) max_sum = incSubArr[i] + decSubArr[i] - arr[i]; return max_sum; } int main(){ int arr[] = {4, 2, 3, 7 ,9, 6, 3, 5, 1}; int N = sizeof(arr) / sizeof(arr[0]); cout<<"The Maximum Sum of Bitonic Subarray is "<<findMaxSumBiTonicSubArr(arr, N); return 0; }
Output
The Maximum Sum of Bitonic Subarray is 30
- Related Articles
- Maximum Sum Circular Subarray in C++
- Maximum subarray sum modulo m in C++
- Maximum circular subarray sum in C++\n
- Find Maximum Sum Strictly Increasing Subarray in C++
- Maximum Subarray Sum with One Deletion in C++
- Maximum Subarray Sum Excluding Certain Elements in C++
- Maximum Size Subarray Sum Equals k in C++
- Maximum subarray sum in O(n) using prefix sum in C++
- Maximum Subarray Sum in a given Range in C++
- Maximum Sum SubArray using Divide and Conquer in C++
- Maximum Subarray Sum Excluding Certain Elements in C++ program
- Maximum length of subarray such that sum of the subarray is even in C++
- Maximum Subarray Sum using Divide and Conquer algorithm in C++
- Maximum sum subarray removing at most one element in C++
- Maximum contiguous sum of subarray in JavaScript
