args4 1.4.12 编写一个程序,有序打印给定的两个有序数组(含有N 个int 值)中的所有公共元素,程序在最坏情况下所需的运行时间应该和N 成正比。
题目要求在最坏的时候和N成正比,我们要利用好这两个有序的数组,我的思路是给两个游标,相等的时候同时移动,
不相等的时候单方移动,这边我直接就牺牲空间,创建两栈,思路可以更清晰点,相等时同时出栈,不相等时,数值大的出栈
public static void q1_4_12(int[] a, int[] b) { java.util.Stack<Integer> stackA = new java.util.Stack<>(); java.util.Stack<Integer> stackB = new java.util.Stack<>(); for (int i = 0; i < a.length; i++) { stackA.push(a[i]); stackB.push(b[i]); } while ((!stackA.empty()) && (!stackB.empty())) { if (stackA.peek().equals(stackB.peek())) { System.out.println(stackA.peek()); stackA.pop(); stackB.pop(); } else if (stackA.peek() < stackB.peek()) { stackB.pop(); } else { stackA.pop(); } } }