Operation counts (counted, not timed) ===================================== nextGreater on a strictly decreasing array (the worst case for the scan-right version) n scan-right compares stack compares stack push+pop 1000 499500 999 1000 10000 49995000 9999 10000 100000 4999950000 99999 100000 nextGreater on random values (n = 100000): every index is pushed once and popped at most once pushes = 100000, pops = 99985, comparisons = 199977 (bound: comparisons <= 2n = 200000) QueueViaStacks: n enqueues followed by n dequeues n total element moves moves in the 1st dequeue 1000 1000 1000 10000 10000 10000 100000 100000 100000 one dequeue can cost n moves, but each element moves exactly once, so n enqueues + n dequeues cost 3n steps in all StackViaQueue: n pushes n total rotations n(n-1)/2 100 4950 4950 1000 499500 499500 5000 12497500 12497500