예제 #1
0
        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());
        }
예제 #2
0
        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);
        }