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);
        }
コード例 #4
0
        /// <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);
        }