以下数组是没有重复元素的(仅包含唯一正整数),规模较小(小于5000),交集(见下文)被调用了很多次,因此任何微观优化都很重要。这篇文章很好地描述了如何加速下面的
在Java中,我想调用那些低级指令是不可能的。但他们提到“可以使用无分支实现来改进此方法”。如何做到这一点?使用
二分查找法(复杂度为
C
代码。int i = 0, j = 0, c = 0, la = a.length, lb = b.length;
intersection = new int[Math.min(la, lb)];
while (i < la && j < lb) {
if (a[i] < b[j]) i++;
else if (a[i] > b[j]) j++;
else {
intersection[c] = a[i];
i++; j++; c++;
}
}
int[] intersectionZip = new int[c];
System.arraycopy(intersection, 0, intersectionZip, 0, c);
在Java中,我想调用那些低级指令是不可能的。但他们提到“可以使用无分支实现来改进此方法”。如何做到这一点?使用
switch
吗?或者用整数操作符替换a[i] < b[j]
、a[i] > b[j]
或a[i] == b[i]
比较?二分查找法(复杂度为
O(la log(lb))
)不适用于此情况,因为la
并不是<<
于lb
。有趣的是如何改变if
语句。