KADANE's ALGORITHM
- C++
- Java
- Python
#include <iostream>
#include <vector>
#include <algorithm>
#include <climits>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> v(n);
for (int i = 0; i < n; i++) {
cin >> v.at(i);
}
/*BEST IMPLEMENTATION OF KADEN's ALGORITHM to solve
"SUBARRAY WITH THE MAXIMUM SUM or "MAXIMUM CONTAGIOUS SUBARRAY": */
int sum = 0, ans = INT_MIN;
for (int i = 0; i < n; i++) {
sum += v.at(i);
ans = max(ans, sum); //always assign it before max(sum, 0).
sum = max(sum, 0);
}
cout << ans << "\n";
//It prints the MAXIMUM SUBARRAY SUM or
//IF ALL THE ELEMENTS ARE -ve, then it prints ONLY THE MAXIMUM -ve NUMBER (only if the the "max(sum, ans)" is applied before "max(sum, 0)").
//ALSO
/*
//KADEN's ALGORITHM to solve SUBARRAY WITH THE MAXIMUM SUM or "MAXIMUM CONTAGIOUS SUBARRAY"
int sum = 0, ans = INT_MIN;
for (int i = 0; i < n; i++) {
sum += v.at(i);
if(sum<0) {
sum=0;
}
if (sum > ans) { //or ans=max(ans, sum);
ans = sum;
}
}
cout<<ans;
*/
/*###################################*/
/*###################################*/
/*###################################*/
/*###################################*/
/*###################################*/
//KAADANE's ALGORITHM for "( MAXIMUM SUM OF CIRCULAR SUBARRAY )" ⏩
/*
#include <iostream>
#include <vector>
#include <algorithm>
#include <climits>
using namespace std;
int kadane(vector<int> v) {
int sum = 0, ans = INT_MIN;
for (int i = 0; i < v.size(); i++) {
sum += v.at(i);
ans = max(ans, sum);
sum = (sum, 0);
}
return ans;
}
int main() {
freopen("inputf.in", "r", stdin);
freopen("outputf.in", "w", stdout);
int n;
cin >> n;
vector<int> v(n);
for (int i = 0; i < n; i++) {
cin >> v.at(i);
}
int nonwrap = kadane(v);
int wrap;
int total = 0;
for (int i = 0; i < n; i++) {
total += v.at(i);
v.at(i) = -v.at(i); //This will find the sum of the "non-wrapping SubArray which is to be removed."
}
wrap=total-(-kadane(v)); //as vector(v) has been made -ve, So " [-(sum of -ve vector(v))] ".
cout << max(wrap, nonwrap);
return 0;
}
//<==Ending of MAXIMUM SUM OF CIRCULAR SUBARRAY
*/
/*###################################*/
/*###################################*/
/*###################################*/
/*###################################*/
/*###################################*/
/* //Using (Range For Loop) also called (For-each Loop) instead of for loop⏩
int sum=0, ans=INT_MIN;
for (auto el:v) {
sum+= el;
ans=max(ans,sum);
sum=max(sum,0);
}
cout<<ans<<"\n";
*/
return 0;
}
class HelloWorld {
public static void main(String args[]) {
System.out.println("Hello, World");
}
}
def hello_world():
print 'Hello, world!'