public void FindMaxProductSubArrayByBruteForceMethod_should_find_Max_Product_SubArray_In_a_Array_having_many_Elements() { var inputToTest = new int[] { 0, 0, -2, 0, 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 2, -3, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, -3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, -3, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3, 0, 0, -1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -3, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, -2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 2, 0, 0, 0, 0, 0, -1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, -2, 0, -1, 0, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0 }; var expectedResult = new SubArrayProductResult() { ProductSum = 6 }; expectedResult.SubArrayIndexes.Add(new Tuple <int, int>(227, 228)); var result = ArrayOperations.FindMaxProductSubArrayByBruteForceMethod(inputToTest); Assert.IsNotNull(result); Assert.AreEqual(result, expectedResult); }
public void FindMaxProductSubArrayByBruteForceMethod_should_find_Max_Product_SubArray_In_a_Array_having_2_Elements() { var inputToTest = new int[] { 1, -5 }; var expectedResult = new SubArrayProductResult() { ProductSum = 1 }; expectedResult.SubArrayIndexes.Add(new Tuple <int, int>(0, 0)); var result = ArrayOperations.FindMaxProductSubArrayByBruteForceMethod(inputToTest); Assert.IsNotNull(result); Assert.AreEqual(result, expectedResult); }
public void FindMaxProductSubArrayByBruteForceMethod_should_find_Max_Product_SubArray() { var inputToTest = new int[] { 2, 3, -2, 4 }; var expectedResult = new SubArrayProductResult() { ProductSum = 6 }; expectedResult.SubArrayIndexes.Add(new Tuple <int, int>(0, 1)); var result = ArrayOperations.FindMaxProductSubArrayByBruteForceMethod(inputToTest); Assert.IsNotNull(result); Assert.AreEqual(result, expectedResult); }
/// <summary> /// Finds the maximum product sub array by brute force method. /// </summary> /// <param name="a">input array.</param> /// <returns>Returns sub array [start index, end index] having maximum product</returns> public static SubArrayProductResult FindMaxProductSubArrayByBruteForceMethod(int[] a) { if (a == null || a.Length == 0) { return(null); } SubArrayProductResult result = new SubArrayProductResult(); int lastSubArrayStartIndex = 0; for (int i = 0; i < a.Length; i++) { for (int j = i; j < a.Length; j++) { var currSubArraySum = GetProduct(a, i, j); if (currSubArraySum > result.ProductSum) { result.ProductSum = currSubArraySum; result.SubArrayIndexes.Clear(); result.SubArrayIndexes.Add(new Tuple <int, int>(i, j)); lastSubArrayStartIndex = i; } else if (currSubArraySum == result.ProductSum /*&& lastSubArrayStartIndex != i*/) { /* Reason for the check => (lastSubArrayStartIndex != i): * If the current subarray with max-sum includes * the previously added subarray * then do not add the subarray as max-sum subarray * Example: 0-3 = 10 and 0-5 = 10 then * do no consider the second sub-array ranging 0-5 as max-sum subarray. */ result.SubArrayIndexes.Add(new Tuple <int, int>(i, j)); lastSubArrayStartIndex = i; } } } return(result); }
public void FindMaxProductSubArrayByBruteForceMethod_should_find_Max_Product_SubArray_In_a_Array_having_Zero() { var inputToTest = new int[] { -1, 0, -5, 0 }; var expectedResult = new SubArrayProductResult() { ProductSum = 0 }; expectedResult.SubArrayIndexes.Add(new Tuple <int, int>(0, 1)); expectedResult.SubArrayIndexes.Add(new Tuple <int, int>(0, 2)); expectedResult.SubArrayIndexes.Add(new Tuple <int, int>(0, 3)); expectedResult.SubArrayIndexes.Add(new Tuple <int, int>(1, 1)); expectedResult.SubArrayIndexes.Add(new Tuple <int, int>(1, 2)); expectedResult.SubArrayIndexes.Add(new Tuple <int, int>(1, 3)); expectedResult.SubArrayIndexes.Add(new Tuple <int, int>(2, 3)); expectedResult.SubArrayIndexes.Add(new Tuple <int, int>(3, 3)); var result = ArrayOperations.FindMaxProductSubArrayByBruteForceMethod(inputToTest); Assert.IsNotNull(result); Assert.AreEqual(result, expectedResult); }