//update This is the right sln which takes care of the negative and sequence building.. private SequenceSum FindMaxSumAndSequence2(int[] array) { //we can intialize to 0 but to handle negative number, i set it to min int int maxsum = Int32.MinValue; int sum = 0; StringBuilder sequence = new StringBuilder(); string maxsequence = string.Empty; for (int i = 0; i < array.Length; i++) { sum = sum + array[i]; sequence.Append(array[i]).Append(","); if (maxsum < sum) { maxsum = sum; maxsequence = sequence.ToString(); } else if (sum < 0) { sum = 0; //reset sum to 0 when the sum value is negative sequence.Clear(); } } SequenceSum result = new SequenceSum(); result.MaxSum = maxsum; result.Sequence = maxsequence.ToString(); return(result); }
private void button6_Click(object sender, EventArgs e) { int[] input = AlgorithmHelper.ConvertCommaSeparetedStringToInt(this.textBox11.Text); SequenceSum result = FindMaxSumAndSequenceWithAllNegativeHandle(input); this.textBox10.Text = result.MaxSum.ToString(); this.textBox12.Text = result.Sequence; }
public void SequenceSum_Test_0() { int input = 0; int[] expected = new int[] { 0 }; int[] actual = SequenceSum.SumOfN(input); CollectionAssert.AreEqual(expected, actual); }
public void SequenceSum_Test_Neg7() { int input = -7; int[] expected = new int[] { 0, -1, -3, -6, -10, -15, -21, -28 }; int[] actual = SequenceSum.SumOfN(input); CollectionAssert.AreEqual(expected, actual); }
public void SequenceSum_Test_NegativeFour() { int input = -4; int[] expected = new int[] { 0, -1, -3, -6, -10 }; int[] actual = SequenceSum.SumOfN(input); CollectionAssert.AreEqual(expected, actual); }
public void SequenceSum_Test_Ten() { int input = 10; int[] expected = new int[] { 0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55 }; int[] actual = SequenceSum.SumOfN(input); CollectionAssert.AreEqual(expected, actual); }
//Logic: Maintain the maxsum value and sum value //remember to reset sum to zero when the sum value is lesser than 0 bcoz when the negative value comes as sum..if we add to another negative worse sum or to positive still lesser than positive value //Consider the scenario when the array contains all negative numbers..possible options 0, larger of negative or min_int..discuss with interviewer private SequenceSum FindMaxSumAndSequenceWithAllNegativeHandle(int[] array) { //we can intialize to 0 but to handle negative number, i set it to min int int maxsum = Int32.MinValue; int sum = 0; bool skippedsequence = false; StringBuilder sb = new StringBuilder(); for (int i = 0; i < array.Length; i++) { sum = sum + array[i]; //only if the sum is greater than 0 append...ie build the sequence if (sum > 0) { sb.Append(array[i]).Append(","); } if (maxsum < sum) { //Handle for negative number //if the maxsum is already negative and the new sum is greater than maxsum..clear the sb if (maxsum < 0 || (skippedsequence == true)) { sb.Clear(); sb.Append(array[i]).Append(","); skippedsequence = false; } maxsum = sum; } if (sum < 0) { sum = 0; //reset sum to 0 when the sum value is negative //if sum is negative and maxsum is positive then we are skipped the number in sequence //so we have to clear when we find the highest if (maxsum > 0) { skippedsequence = true; } } } SequenceSum result = new SequenceSum(); result.MaxSum = maxsum; result.Sequence = sb.ToString(); return(result); }