wrapping/non wrapping kadanes
#include <iostream>
#include <bits/stdc++.h>
#include <climits>
using namespace std;
void display(int *arr, int n){
for(int i=0;i<n;i++){
cout<<arr[i];
}
}
int kadone(int *arr,int n){
int maxsum=INT_MIN;
int sum=0;
for(int i=0;i<n;i++){
sum=sum+arr[i];
if(sum<0){
sum=0;
}
maxsum=max(sum,maxsum);
}
return maxsum;
}
int main() {
int arr[]={-4,4,-6,6,10,-11,12};
int n=sizeof(arr)/sizeof(int);
int maxsum=INT_MIN;
int sum=0;
//int arr_sum[n];
int normal_sum=kadone(arr,n);
cout<<normal_sum<<endl;
int comp_arr[n];
for(int i=0;i<n;i++){
comp_arr[i]=-arr[i];
}
int wrap_sum=kadone(comp_arr,n);
cout<<wrap_sum<<endl;
//int total_sum=normal_sum-wrap_sum;
for(int i=0;i<n;i++){
sum+=arr[i];
}
cout<<sum<<endl;
int total_sum=sum-(-wrap_sum);
cout<<max(normal_sum,total_sum)<<endl;
return 0;
}
Comments
Post a Comment