Arrays 计算两个有序数组中公共元素的有效方法

Arrays 计算两个有序数组中公共元素的有效方法,arrays,Arrays,从逻辑上讲,两个数组只需一次就可以找到公共元素,但在代码中,cpu效率最高的方法是什么 一个有效的示例(Java): public Long[]commonElements(Long[]array1,Long[]array2){ int i1=0; int i2=0; List common=new ArrayList(); 而(i1

从逻辑上讲,两个数组只需一次就可以找到公共元素,但在代码中,cpu效率最高的方法是什么

一个有效的示例(Java):

public Long[]commonElements(Long[]array1,Long[]array2){
int i1=0;
int i2=0;
List common=new ArrayList();
而(i1array2[i2]){
i2++;
}否则{
i1++;
}
}
返回common.toArray(新的Long[common.size()]);
}

编辑:
理想情况下,如果两个数组都是降序或升序,则该函数应该可以工作

您似乎回答了自己的问题。不过,CPU效率最高的方法是用汇编语言实现;-)@肯尼:我希望有人会告诉我不要使用收藏品:哦,它们太整洁了,不能不使用!但是是的,它确实需要对公共元素集合进行两次遍历(可能)…@Kenney我注意到我的方法只有在两个数组都是升序时才有效。是否有一种解决方案即使它们都在下降也能起作用?是的,只要它们是有序的。将
更改为

public Long[] commonElements(long[] array1, long[] array2) {
    int i1 = 0;
    int i2 = 0;
    List<Long> common = new ArrayList<>();
    while(i1 < array1.length && i2< array2.length){
        if(array1[i1] == array2[i2]){
            common.add(array1[i1]);
            i1++;
            i2++;
        } else if(array1[i1] > array2[i2]){
            i2++;
        } else {
            i1++;
        }
    }
    return common.toArray(new Long[common.size()]);
}