57 lines
1.8 KiB
Java
57 lines
1.8 KiB
Java
|
/*This is a Java Program to find maximum subarray sum of an array.
|
||
|
A subarray is a continuous portion of an array. The following program uses binary search approach to find the maximum subarray sum.
|
||
|
The time complexity of the following program is O (n log n).*/
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Java Program to Find the maximum subarray sum using Binary Search approach
|
||
|
*/
|
||
|
import java.util.Scanner;
|
||
|
|
||
|
public class MaxSubarraySum2
|
||
|
{
|
||
|
public static void main(String[] args)
|
||
|
{
|
||
|
Scanner scan = new Scanner(System.in);
|
||
|
System.out.println("Enter number of elements in array");
|
||
|
int N = scan.nextInt();
|
||
|
int[] arr = new int[ N ];
|
||
|
/* Accept N elements */
|
||
|
System.out.println("Enter "+ N +" elements");
|
||
|
for (int i = 0; i < N; i++)
|
||
|
arr[i] = scan.nextInt();
|
||
|
System.out.println("Max sub array sum = "+ max_sum(arr));
|
||
|
}
|
||
|
public static int max_sum(int[] arr)
|
||
|
{
|
||
|
return max_sum(arr, 0, arr.length - 1);
|
||
|
}
|
||
|
public static int max_sum(int[] arr, int low, int mid, int high)
|
||
|
{
|
||
|
int l = Integer.MIN_VALUE, r = Integer.MIN_VALUE;
|
||
|
for (int i = mid, sum = 0; i >= low; i--)
|
||
|
if ((sum += arr[i]) > l)
|
||
|
l = sum;
|
||
|
for (int i = mid +1, sum = 0; i <= high; i++)
|
||
|
if ((sum += arr[i]) > r)
|
||
|
r = sum;
|
||
|
return l + r;
|
||
|
}
|
||
|
public static int max_sum(int[] arr, int low, int high)
|
||
|
{
|
||
|
if (low == high)
|
||
|
return arr[low];
|
||
|
int mid = (low + high)/2;
|
||
|
int max1 = max_sum(arr, low, mid);
|
||
|
int max2 = max_sum(arr, mid + 1, high);
|
||
|
int max3 = max_sum(arr, low, mid, high);
|
||
|
return Math.max(Math.max(max1, max2), max3);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
Enter number of elements in array
|
||
|
8
|
||
|
Enter 8 elements
|
||
|
20 5 3 -2 -1 -5 43 24
|
||
|
Max sub array sum = 87
|