Warning: session_start(): open(/var/lib/php/sessions/sess_bh3ins5phst0euvc5fq6hs3sao, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
scope intersectSortedIntArrays_ofs_optimized2.
// is allowed to return null when result is empty
// ofs is added to elements of b prior to comparison
static int[] intersectSortedIntArrays_ofs_optimized2(int[] a, int[] b, int ofs) {
int i = 0, j = 0, la = l(a), lb = l(b);
// swap if a is longer than b
if (la > lb) {
int[] temp = a; a = b; b = temp;
int temp2 = la; la = lb; lb = temp2;
}
// special case zero elements
if (la == 0) null;
// special case one element
if (la == 1)
ret Arrays.binarySearch(b, a[0]-ofs) >= 0 ? a : null;
new IntBuffer buf;
recurse(a, b, buf, 0, la, 0, lb);
ret buf.toArray();
}
svoid #recurse(int[] a, int[] b, int ofs, IntBuffer buf, int aFrom, int aTo, int bFrom, int bTo) {
if (aFrom >= aTo || bFrom >= bTo) ret; // nothing to do
// start in the middle of a, search this element in b
int i = (aFrom+aTo)/2;
int x = a[i];
int j = Arrays.binarySearch(b, bFrom, bTo, x-ofs);
if (j >= 0) {
// element found
recurse(a, b, ofs, buf, aFrom, i, bFrom, j);
buf.add(x);
recurse(a, b, ofs, buf, i+1, aTo, j+1, bTo);
} else {
j = -j-1;
recurse(a, b, ofs, buf, aFrom, i, bFrom, j);
recurse(a, b, ofs, buf, i+1, aTo, j, bTo);
}
}
end scope