kadane algorithm
Code Example - kadane algorithm
public int kadane(int[] arr){
int max_so_far = 0, curr_max = Integer.MIN_VALUE;
for(int i: arr){
max_so_far += i;
if(max_so_far<0) max_so_far = 0;
if(max_so_far>curr_max) curr_max = max_so_far;
}
return curr_max;
}
maximum sum subarray
public static int SumArray()
{
var arr = new int[]{ -2, -4, -5, -6, -7, -89, -56 };
var sum = 0;
var max = arr[0];
foreach (var item in arr)
{
sum += item;
// sum = Math.Max(sum,0); resting here will not give expected output
max = Math.Max(sum,max);
sum = Math.Max(sum,0);
}
return max;
}
maximum subarray solution leetcode
def approach3(nums):
ans = nums[0]
subarr_sum = nums[0]
for i in range(1, len(nums)):
subarr_sum = max(nums[i], nums[i] + subarr_sum)
ans = max(ans, subarr_sum)
return ans
find maximum sum in array of contiguous subarrays
#include <iostream>
using namespace std;
int main(){
//Input Array
int n;
cin >> n;
int arr[n];
for(int i =0;i< n;i++){
cin >> arr[i];
}
int currentSum = 0;
int maxSum = INT_MIN;
//algo
for (int i = 0; i < n; i++)
{
currentSum += arr[i];
if (currentSum <0)
{
currentSum = 0;
}
maxSum = max(maxSum, currentSum);
}
cout << maxSum << endl;
return 0;
}
max subsequence sum in array
def max_subarray(numbers):
"""Find the largest sum of any contiguous subarray."""
best_sum = 0 # or: float('-inf')
current_sum = 0
for x in numbers:
current_sum = max(0, current_sum + x)
best_sum = max(best_sum, current_sum)
return best_sum
maximum subarray
const maxSubArray = (arr) => {
let currSum = getSum(arr, 0, 4);
let maxSum = 0
for(let i = 1; i < arr.length - 4; i++){
currSum = currSum - arr[i - 1];
currSum = currSum + arr[i + 3];
maxSum = Math.max(currSum, maxSum);
}
return maxSum;
}
const getSum = (arr, start, end) => {
let sum = 0;
for(let i = start; i < end; i++){
sum += arr[i]
}
console.log(sum);
return sum;
}
Kadane's algorithm
public static int SumArray()
{
var arr = new int[]{ -2, -4, -5, -6, -7, -89, -56 };
var sum = 0;
var max = arr[0];
foreach (var item in arr)
{
sum += item;
// sum = Math.Max(sum,0); resting here will not give expected output
max = Math.Max(sum,max);
sum = Math.Max(sum,0);
}
return max;
}