diff --git a/Dynamic-Programming/KadaneAlgo.js b/Dynamic-Programming/KadaneAlgo.js index 1e275dd09..e436b6edd 100644 --- a/Dynamic-Programming/KadaneAlgo.js +++ b/Dynamic-Programming/KadaneAlgo.js @@ -1,20 +1,25 @@ -function KadaneAlgo (array) { +/* Kadane's algorithm is one of the most efficient ways to + * calculate the maximum contiguos subarray sum for a given array. + * Below is the implementation of kadanes's algorithm along with + * some sample test cases. + * There might be a special case in this problem if al the elements + * of the given array are negative. In such a case, the maximum negative + * value present in the array is the answer. + * + * Reference article :- https://www.geeksforgeeks.org/largest-sum-contiguous-subarray/ + */ + +export function kadaneAlgo (array) { let cummulativeSum = 0 - let maxSum = 0 + let maxSum = Number.NEGATIVE_INFINITY // maxSum has the least posible value for (let i = 0; i < array.length; i++) { cummulativeSum = cummulativeSum + array[i] - if (cummulativeSum < 0) { - cummulativeSum = 0 - } else if (maxSum < cummulativeSum) { + if (maxSum < cummulativeSum) { maxSum = cummulativeSum + } else if (cummulativeSum < 0) { + cummulativeSum = 0 } } return maxSum // This function returns largest sum contiguous sum in a array } -function main () { - const myArray = [1, 2, 3, 4, -6] - const result = KadaneAlgo(myArray) - console.log(result) -} -main() diff --git a/Dynamic-Programming/tests/KadaneAlgo.test.js b/Dynamic-Programming/tests/KadaneAlgo.test.js new file mode 100644 index 000000000..c1f883113 --- /dev/null +++ b/Dynamic-Programming/tests/KadaneAlgo.test.js @@ -0,0 +1,8 @@ +import { kadaneAlgo } from '../KadaneAlgo' +test('it is being checked that 15 is the answer to the corresponding array input', () => { + expect(kadaneAlgo([1, 2, 3, 4, 5])).toBe(15) +}) + +test('it is being checked that 5 is the answer to the corresponding array input', () => { + expect(kadaneAlgo([-1, -2, -3, -4, 5])).toBe(5) +})