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();
            }

        }

    }

 

posted @ 2020-04-24 10:17  junlancer  阅读(248)  评论(0编辑  收藏  举报