Formed in 2009, the Archive Team (not to be confused with the archive.org Archive-It Team) is a rogue archivist collective dedicated to saving copies of rapidly dying or deleted websites for the sake of history and digital heritage. The group is 100% composed of volunteers and interested parties, and has expanded into a large amount of related projects for saving online and digital history.
History is littered with hundreds of conflicts over the future of a community, group, location or business that were "resolved" when one of the parties stepped ahead and destroyed what was there. With the original point of contention destroyed, the debates would fall to the wayside. Archive Team believes that by duplicated condemned data, the conversation and debate can continue, as well as the richness and insight gained by keeping the materials. Our projects have ranged in size from a single volunteer downloading the data to a small-but-critical site, to over 100 volunteers stepping forward to acquire terabytes of user-created data to save for future generations.
The main site for Archive Team is at archiveteam.org and contains up to the date information on various projects, manifestos, plans and walkthroughs.
This collection contains the output of many Archive Team projects, both ongoing and completed. Thanks to the generous providing of disk space by the Internet Archive, multi-terabyte datasets can be made available, as well as in use by the Wayback Machine, providing a path back to lost websites and work.
Our collection has grown to the point of having sub-collections for the type of data we acquire. If you are seeking to browse the contents of these collections, the Wayback Machine is the best first stop. Otherwise, you are free to dig into the stacks to see what you may find.
The Archive Team Panic Downloads are full pulldowns of currently extant websites, meant to serve as emergency backups for needed sites that are in danger of closing, or which will be missed dearly if suddenly lost due to hard drive crashes or server failures.
Initialize:
max_so_far = 0
max_ending_here = 0
Loop for each element of the array
(a) max_ending_here = max_ending_here + a[i]
(b) if(max_so_far < max_ending_here)
max_so_far = max_ending_here
(c) if(max_ending_here < 0)
max_ending_here = 0
return max_so_far
Explanation: The simple idea of Kadane’s algorithm is to look for all positive contiguous segments of the array (max_ending_here is used for this). And keep track of maximum sum contiguous segment among all positive segments (max_so_far is used for this). Each time we get a positive-sum compare it with max_so_far and update max_so_far if it is greater than max_so_far
Lets take the example:
{-2, -3, 4, -1, -2, 1, 5, -3}
max_so_far = max_ending_here = 0
for i=0, a[0] = -2
max_ending_here = max_ending_here + (-2)
Set max_ending_here = 0 because max_ending_here < 0
for i=1, a[1] = -3
max_ending_here = max_ending_here + (-3)
Set max_ending_here = 0 because max_ending_here < 0
for i=2, a[2] = 4
max_ending_here = max_ending_here + (4)
max_ending_here = 4
max_so_far is updated to 4 because max_ending_here greater
than max_so_far which was 0 till now
for i=3, a[3] = -1
max_ending_here = max_ending_here + (-1)
max_ending_here = 3
for i=4, a[4] = -2
max_ending_here = max_ending_here + (-2)
max_ending_here = 1
for i=5, a[5] = 1
max_ending_here = max_ending_here + (1)
max_ending_here = 2
for i=6, a[6] = 5
max_ending_here = max_ending_here + (5)
max_ending_here = 7
max_so_far is updated to 7 because max_ending_here is
greater than max_so_far
for i=7, a[7] = -3
max_ending_here = max_ending_here + (-3)
max_ending_here = 4
Program:
C++
// C++ program to print largest contiguous array sum
#include<iostream>
#include<climits>
usingnamespacestd;
intmaxSubArraySum(inta[], intsize)
{
intmax_so_far = INT_MIN, max_ending_here = 0;
for(inti = 0; i < size; i++)
{
max_ending_here = max_ending_here + a[i];
if(max_so_far < max_ending_here)
max_so_far = max_ending_here;
if(max_ending_here < 0)
max_ending_here = 0;
}
returnmax_so_far;
}
/*Driver program to test maxSubArraySum*/
intmain()
{
inta[] = {-2, -3, 4, -1, -2, 1, 5, -3};
intn = sizeof(a)/sizeof(a[0]);
intmax_sum = maxSubArraySum(a, n);
cout << "Maximum contiguous sum is "<< max_sum;
return0;
}
Java
importjava.io.*;
// Java program to print largest contiguous array sum
print"Maximum contiguous sum is", maxSubArraySum(a,len(a))
#This code is contributed by _Devesh Agrawal_
C#
// C# program to print largest
// contiguous array sum
usingSystem;
classGFG
{
staticintmaxSubArraySum(int[]a)
{
intsize = a.Length;
intmax_so_far = int.MinValue,
max_ending_here = 0;
for(inti = 0; i < size; i++)
{
max_ending_here = max_ending_here + a[i];
if(max_so_far < max_ending_here)
max_so_far = max_ending_here;
if(max_ending_here < 0)
max_ending_here = 0;
}
returnmax_so_far;
}
// Driver code
publicstaticvoidMain ()
{
int[] a = {-2, -3, 4, -1, -2, 1, 5, -3};
Console.Write("Maximum contiguous sum is "+
maxSubArraySum(a));
}
}
// This code is contributed by Sam007_
PHP
<?php
// PHP program to print largest
// contiguous array sum
functionmaxSubArraySum($a, $size)
{
$max_so_far= PHP_INT_MIN;
$max_ending_here= 0;
for($i= 0; $i< $size; $i++)
{
$max_ending_here= $max_ending_here+ $a[$i];
if($max_so_far< $max_ending_here)
$max_so_far= $max_ending_here;
if($max_ending_here< 0)
$max_ending_here= 0;
}
return$max_so_far;
}
// Driver code
$a= array(-2, -3, 4, -1,
-2, 1, 5, -3);
$n= count($a);
$max_sum= maxSubArraySum($a, $n);
echo"Maximum contiguous sum is ",
$max_sum;
// This code is contributed by anuj_67.
?>
Output:
Maximum contiguous sum is 7
Above program can be optimized further, if we compare max_so_far with max_ending_here only if max_ending_here is greater than 0.
C++
intmaxSubArraySum(inta[], intsize)
{
intmax_so_far = 0, max_ending_here = 0;
for(inti = 0; i < size; i++)
{
max_ending_here = max_ending_here + a[i];
if(max_ending_here < 0)
max_ending_here = 0;
/* Do not compare for all elements. Compare only
when max_ending_here > 0 */
elseif(max_so_far < max_ending_here)
max_so_far = max_ending_here;
}
returnmax_so_far;
}
Java
staticintmaxSubArraySum(inta[],intsize)
{
intmax_so_far = 0, max_ending_here = 0;
for(inti = 0; i < size; i++)
{
max_ending_here = max_ending_here + a[i];
if(max_ending_here < 0)
max_ending_here = 0;
/* Do not compare for all
elements. Compare only
when max_ending_here > 0 */
elseif(max_so_far < max_ending_here)
max_so_far = max_ending_here;
}
returnmax_so_far;
}
// This code is contributed by ANKITRAI1
Python
defmaxSubArraySum(a,size):
max_so_far =0
max_ending_here =0
fori inrange(0, size):
max_ending_here =max_ending_here +a[i]
ifmax_ending_here < 0:
max_ending_here =0
# Do not compare for all elements. Compare only
# when max_ending_here > 0
elif(max_so_far < max_ending_here):
max_so_far =max_ending_here
returnmax_so_far
C#
staticintmaxSubArraySum(int[] a,
intsize)
{
intmax_so_far = 0,
max_ending_here = 0;
for(inti = 0; i < size; i++)
{
max_ending_here = max_ending_here + a[i];
if(max_ending_here < 0)
max_ending_here = 0;
/* Do not compare for all
elements. Compare only
when max_ending_here > 0 */
elseif(max_so_far < max_ending_here)
max_so_far = max_ending_here;
}
returnmax_so_far;
}
// This code is contributed
// by ChitraNayal
PHP
<?php
functionmaxSubArraySum(&$a, $size)
{
$max_so_far= 0;
$max_ending_here= 0;
for($i= 0; $i< $size; $i++)
{
$max_ending_here= $max_ending_here+ $a[$i];
if($max_ending_here< 0)
$max_ending_here= 0;
/* Do not compare for all elements.
Compare only when max_ending_here > 0 */
elseif($max_so_far< $max_ending_here)
$max_so_far= $max_ending_here;
}
return$max_so_far;
// This code is contributed
// by ChitraNayal
?>
Time Complexity: O(n) Algorithmic Paradigm: Dynamic Programming Following is another simple implementation suggested by Mohit Kumar. The implementation handles the case when all numbers in array are negative.
C++
#include<iostream>
usingnamespacestd;
intmaxSubArraySum(inta[], intsize)
{
intmax_so_far = a[0];
intcurr_max = a[0];
for(inti = 1; i < size; i++)
{
curr_max = max(a[i], curr_max+a[i]);
max_so_far = max(max_so_far, curr_max);
}
returnmax_so_far;
}
/* Driver program to test maxSubArraySum */
intmain()
{
inta[] = {-2, -3, 4, -1, -2, 1, 5, -3};
intn = sizeof(a)/sizeof(a[0]);
intmax_sum = maxSubArraySum(a, n);
cout << "Maximum contiguous sum is "<< max_sum;
return0;
}
Java
// Java program to print largest contiguous
// array sum
importjava.io.*;
classGFG {
staticintmaxSubArraySum(inta[], intsize)
{
intmax_so_far = a[0];
intcurr_max = a[0];
for(inti = 1; i < size; i++)
{
curr_max = Math.max(a[i], curr_max+a[i]);
max_so_far = Math.max(max_so_far, curr_max);
}
returnmax_so_far;
}
/* Driver program to test maxSubArraySum */
publicstaticvoidmain(String[] args)
{
inta[] = {-2, -3, 4, -1, -2, 1, 5, -3};
intn = a.length;
intmax_sum = maxSubArraySum(a, n);
System.out.println("Maximum contiguous sum is "
+ max_sum);
}
}
// This code is contributd by Prerna Saini
Python
# Python program to find maximum contiguous subarray
defmaxSubArraySum(a,size):
max_so_far =a[0]
curr_max =a[0]
fori inrange(1,size):
curr_max =max(a[i], curr_max +a[i])
max_so_far =max(max_so_far,curr_max)
returnmax_so_far
# Driver function to check the above function
a =[-2, -3, 4, -1, -2, 1, 5, -3]
print"Maximum contiguous sum is", maxSubArraySum(a,len(a))
#This code is contributed by _Devesh Agrawal_
C#
// C# program to print largest
// contiguous array sum
usingSystem;
classGFG
{
staticintmaxSubArraySum(int[]a, intsize)
{
intmax_so_far = a[0];
intcurr_max = a[0];
for(inti = 1; i < size; i++)
{
curr_max = Math.Max(a[i], curr_max+a[i]);
max_so_far = Math.Max(max_so_far, curr_max);
}
returnmax_so_far;
}
// Driver code
publicstaticvoidMain ()
{
int[]a = {-2, -3, 4, -1, -2, 1, 5, -3};
intn = a.Length;
Console.Write("Maximum contiguous sum is "
+ maxSubArraySum(a, n));
}
}
// This code is contributed by Sam007_
PHP
<?php
functionmaxSubArraySum($a, $size)
{
$max_so_far= $a[0];
$curr_max= $a[0];
for($i= 1; $i< $size; $i++)
{
$curr_max= max($a[$i],
$curr_max+ $a[$i]);
$max_so_far= max($max_so_far,
$curr_max);
}
return$max_so_far;
}
// Driver Code
$a= array(-2, -3, 4, -1,
-2, 1, 5, -3);
$n= sizeof($a);
$max_sum= maxSubArraySum($a, $n);
echo"Maximum contiguous sum is ".
$max_sum;
// This code is contributed
// by Akanksha Rai(Abby_akku)
?>
Output:
Maximum contiguous sum is 7
To print the subarray with the maximum sum, we maintain indices whenever we get the maximum sum.
C++
// C++ program to print largest contiguous array sum
#include<iostream>
#include<climits>
usingnamespacestd;
intmaxSubArraySum(inta[], intsize)
{
intmax_so_far = INT_MIN, max_ending_here = 0,
start =0, end = 0, s=0;
for(inti=0; i< size; i++ )
{
max_ending_here += a[i];
if(max_so_far < max_ending_here)
{
max_so_far = max_ending_here;
start = s;
end = i;
}
if(max_ending_here < 0)
{
max_ending_here = 0;
s = i + 1;
}
}
cout << "Maximum contiguous sum is "
<< max_so_far << endl;
cout << "Starting index "<< start
<< endl << "Ending index "<< end << endl;
}
/*Driver program to test maxSubArraySum*/
intmain()
{
inta[] = {-2, -3, 4, -1, -2, 1, 5, -3};
intn = sizeof(a)/sizeof(a[0]);
intmax_sum = maxSubArraySum(a, n);
return0;
}
Java
// Java program to print largest
// contiguous array sum
classGFG {
staticvoidmaxSubArraySum(inta[], intsize)
{
intmax_so_far = Integer.MIN_VALUE,
max_ending_here = 0,start = 0,
end = 0, s = 0;
for(inti = 0; i < size; i++)
{
max_ending_here += a[i];
if(max_so_far < max_ending_here)
{
max_so_far = max_ending_here;
start = s;
end = i;
}
if(max_ending_here < 0)
{
max_ending_here = 0;
s = i + 1;
}
}
System.out.println("Maximum contiguous sum is "
+ max_so_far);
System.out.println("Starting index "+ start);
System.out.println("Ending index "+ end);
}
// Driver code
publicstaticvoidmain(String[] args)
{
inta[] = { -2, -3, 4, -1, -2, 1, 5, -3};
intn = a.length;
maxSubArraySum(a, n);
}
}
// This code is contributed by prerna saini
Python3
# Python program to print largest contiguous array sum
fromsys importmaxsize
# Function to find the maximum contiguous subarray
# and print its starting and end index
defmaxSubArraySum(a,size):
max_so_far =-maxsize -1
max_ending_here =0
start =0
end =0
s =0
fori inrange(0,size):
max_ending_here +=a[i]
ifmax_so_far < max_ending_here:
max_so_far =max_ending_here
start =s
end =i
ifmax_ending_here < 0:
max_ending_here =0
s =i+1
print("Maximum contiguous sum is %d"%(max_so_far))
print("Starting Index %d"%(start))
print("Ending Index %d"%(end))
# Driver program to test maxSubArraySum
a =[-2, -3, 4, -1, -2, 1, 5, -3]
maxSubArraySum(a,len(a))
C#
// C# program to print largest
// contiguous array sum
usingSystem;
classGFG
{
staticvoidmaxSubArraySum(int[]a,
intsize)
{
intmax_so_far = int.MinValue,
max_ending_here = 0, start = 0,
end = 0, s = 0;
for(inti = 0; i < size; i++)
{
max_ending_here += a[i];
if(max_so_far < max_ending_here)
{
max_so_far = max_ending_here;
start = s;
end = i;
}
if(max_ending_here < 0)
{
max_ending_here = 0;
s = i + 1;
}
}
Console.WriteLine("Maximum contiguous "+
"sum is "+ max_so_far);
Console.WriteLine("Starting index "+
start);
Console.WriteLine("Ending index "+
end);
}
// Driver code
publicstaticvoidMain()
{
int[]a = {-2, -3, 4, -1,
-2, 1, 5, -3};
intn = a.Length;
maxSubArraySum(a, n);
}
}
// This code is contributed
// by anuj_67.
PHP
<?php
// PHP program to print largest
// contiguous array sum
functionmaxSubArraySum($a, $size)
{
$max_so_far= PHP_INT_MIN;
$max_ending_here= 0;
$start= 0;
$end= 0;
$s= 0;
for($i= 0; $i< $size; $i++)
{
$max_ending_here+= $a[$i];
if($max_so_far< $max_ending_here)
{
$max_so_far= $max_ending_here;
$start= $s;
$end= $i;
}
if($max_ending_here< 0)
{
$max_ending_here= 0;
$s= $i+ 1;
}
}
echo"Maximum contiguous sum is ".
$max_so_far."\n";
echo"Starting index ". $start. "\n".
"Ending index ". $end. "\n";
}
// Driver Code
$a= array(-2, -3, 4, -1, -2, 1, 5, -3);
$n= sizeof($a);
$max_sum= maxSubArraySum($a, $n);
// This code is contributed
// by ChitraNayal
?>
Output:
Maximum contiguous sum is 7
Starting index 2
Ending index 6
Time Complexity: O(n)
Auxiliary Space: O(1)
Now try below question Given an array of integers (possibly some of the elements negative), write a C program to find out the *maximum product* possible by multiplying ‘n’ consecutive integers in the array where n <= ARRAY_SIZE. Also print the starting point of maximum product subarray.
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
We use cookies to ensure you have the best browsing experience on our website. By using our site, you
acknowledge that you have read and understood our
Cookie Policy &
Privacy Policy