public int EqualStacks_Method(int[] h1, int[] h2, int[] h3) { StackUsingLL <int> obj1 = new StackUsingLL <int>(); for (int i = h1.Length - 1; i >= 0; i--) { obj1.Push(h1[i]); } StackUsingLL <int> obj2 = new StackUsingLL <int>(); for (int i = h2.Length - 1; i >= 0; i--) { obj2.Push(h2[i]); } StackUsingLL <int> obj3 = new StackUsingLL <int>(); for (int i = h3.Length - 1; i >= 0; i--) { obj3.Push(h3[i]); } while ( obj1.SumStack() != obj2.SumStack() || obj2.SumStack() != obj3.SumStack() || obj1.SumStack() != obj3.SumStack() ) { var c = Math.Max(obj1.SumStack(), Math.Max(obj2.SumStack(), obj3.SumStack())); if (c == obj1.SumStack()) { obj1.Pop(); } else if (c == obj2.SumStack()) { obj2.Pop(); } else if (c == obj3.SumStack()) { obj3.Pop(); } } return(obj1.SumStack()); }
static int TwoStacks(int x, int[] a, int[] b) { var obj1 = new StackUsingLL <int>(); var sumStack = new StackUsingLL <int>(); for (int i = a.Length - 1; i >= 0; i--) { obj1.Push(a[i]); } var obj2 = new StackUsingLL <int>(); for (int i = b.Length - 1; i >= 0; i--) { obj2.Push(b[i]); } while (sumStack.SumStack() + obj1.PeekTop() <= x) { sumStack.Push(obj1.Pop()); } int countStack1 = sumStack.StackLength(); int sum = sumStack.SumStack(); int max = countStack1; int countStack2 = 0; while (obj2.StackLength() != 0 && sumStack.StackLength() > 0) { sum = sum + obj2.Pop(); countStack2++; if (sum > x) { sum = sum - sumStack.Pop(); countStack1--; } if (sum <= x && countStack1 + countStack2 > max) { max = countStack1 + countStack2; } } return(max); }