public static int maxSubSum1( int [ ] a )
{
int maxSum = 0;
for( int i = 0; i < a.length; i++)
for( int j = i; j < a.length; j++)
{
int thisSum = 0;
for ( int k = i; k <= j; k++)
thisSum += a[k];
if( thisSum > maxSum )
maxSum = thisSum;
}
return maxSum;
}
Figure 2.5 Algorithm 1
public static int maxSubSum2( int [ ] a )
{
int maxSum = 0;
for ( int i = 0; i < a.length; i++)
{
int thisSum = 0;
for( int j = i; j < a.length; j++ )
{
thisSum += a[j];
if ( thisSum > maxSum )
maxSum = thisSum;
}
}
return maxSum;
}
Figure 2.6 Algorithm 2
public class maxSubSum {
private static int maxSumRec( int [ ] a, int left, int right )
{
if( left == right ) // Base case
if( a[ left ] > 0 )
return a[ left ];
else
return 0;
int center = ( left + right ) / 2;
int maxLeftSum = maxSumRec( a, left, center );
int maxRightSum = maxSumRec( a, center + 1, right );
int maxLeftBorderSum = 0, leftBorderSum = 0;
for( int i = center; i >= left; i-- )
{
leftBorderSum += a[ i ];
if( leftBorderSum > maxLeftBorderSum )
maxLeftBorderSum = leftBorderSum;
}
int maxRightBorderSum = 0, rightBorderSum = 0;
for( int i = center + 1; i <= right; i++ )
{
rightBorderSum += a[ i ];
if( rightBorderSum > maxRightBorderSum )
maxRightBorderSum = rightBorderSum;
}
return max3( maxLeftSum, maxRightSum,
maxLeftBorderSum + maxRightBorderSum );
}
private static int max3( int a, int b, int c )
{
return a >= b ? ( a >= c ? a : c ) : ( b >= c ? b : c );
}
public static int maxSubSum3( int [] a )
{
return maxSumRec( a, 0, a.length - 1 );
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] a = {4, -3, 5, -2, -1, 2, 6, -2};
System.out.println(maxSubSum3(a));
}
}
Figure 2.7 Algorithm 3
public class MaxSubSum4 {
public static int maxSubSum4( int [ ] a )
{
int maxSum = 0, thisSum = 0;
for( int j = 0; j < a.length; j++)
{
thisSum += a[ j ];
if( thisSum > maxSum )
maxSum = thisSum;
else if( thisSum < 0 )
thisSum = 0;
}
return maxSum;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] a = { 4, -3, 5, -2, -1, 2, 6, -2};
System.out.println(maxSubSum4(a));
}
}
Figure 2.8 Algorithm 4
public class BinarySearch {
public static <AnyType extends Comparable<? super AnyType>>
int binarySearch( AnyType [ ] a, AnyType x )
{
int low = 0, high = a.length;
while( low <= high )
{
int mid = ( low + high ) / 2;
if( a[ mid ].compareTo( x ) < 0 )
low = mid + 1;
else if ( a[ mid ].compareTo( x ) > 0 )
high = mid - 1;
else
return mid;
}
return -1; // NOT_FOUND is defined as -1
}
public static long gcd( long m, long n )
{
if( m < n )
{
long temp = m;
m = n;
n = temp;
}
while( n != 0 )
{
long rem = m % n;
m = n;
n = rem;
}
return m;
}
public static long pow( long x, int n)
{
if ( n == 0 )
return 1;
else if( n % 2 == 0 )
return pow( x * x, n / 2 );
else
return pow( x, n - 1 ) * x;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Integer [] a = {1,2,3,4,5};
System.out.println( binarySearch( a, 5 ) );
System.out.println( gcd( 50, 15 ) );
System.out.println( pow( 50, 5 ) );
}
}