Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 26s
Two-pointer merge advancing the smaller-head pointer k times,
without materializing the merged array:
while !count < k do
let pick_a =
if !i = m then false (* a exhausted, take from b *)
else if !j = n then true (* b exhausted, take from a *)
else a.(!i) <= b.(!j)
in
if pick_a then ... else ...;
count := !count + 1
done
For a = [1;3;5;7;9;11;13], b = [2;4;6;8;10;12]:
merged order: 1,2,3,4,5,6,7,8,9,10,11,12,13
8th element = 8.
Tests nested if/else if/else flowing into a bool, dual-ref
two-pointer loop, separate count counter for k-th constraint.
184 baseline programs total.
28 lines
556 B
OCaml
28 lines
556 B
OCaml
let kth_two a b k =
|
|
let m = Array.length a in
|
|
let n = Array.length b in
|
|
let i = ref 0 and j = ref 0 and count = ref 0 in
|
|
let result = ref 0 in
|
|
while !count < k do
|
|
let pick_a =
|
|
if !i = m then false
|
|
else if !j = n then true
|
|
else a.(!i) <= b.(!j)
|
|
in
|
|
if pick_a then begin
|
|
result := a.(!i);
|
|
i := !i + 1
|
|
end else begin
|
|
result := b.(!j);
|
|
j := !j + 1
|
|
end;
|
|
count := !count + 1
|
|
done;
|
|
!result
|
|
|
|
;;
|
|
|
|
let a = [| 1; 3; 5; 7; 9; 11; 13 |] in
|
|
let b = [| 2; 4; 6; 8; 10; 12 |] in
|
|
kth_two a b 8
|