ocaml: phase 5.1 min_meeting_rooms.ml baseline (8 meetings, min 4 rooms)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 24s

Sweep-line algorithm via separately-sorted starts / ends arrays:

  while i < n do
    if starts[i] < ends[j] then begin busy++; rooms = max; i++ end
    else begin busy--; j++ end
  done

  intervals: (0,30) (5,10) (15,20) (10,25) (5,12)
             (20,35) (0,5)  (8,18)

At time 8, meetings (0,30), (5,10), (5,12), (8,18) are all active
simultaneously -> answer = 4.

Tests local helper bound via let (`let bubble a = ...`) for
in-place sort, dual-pointer sweep on parallel ordered event streams.

193 baseline programs total.
This commit is contained in:
2026-05-11 04:14:33 +00:00
parent 90ba37ecc8
commit bf468e5ec3
3 changed files with 50 additions and 0 deletions

View File

@@ -121,6 +121,7 @@
"mortgage.ml": 1073,
"mst_kruskal.ml": 11,
"merge_intervals.ml": 12,
"min_meeting_rooms.ml": 4,
"merge_sort.ml": 44,
"merge_two.ml": 441,
"min_cost_path.ml": 12,

View File

@@ -0,0 +1,40 @@
let min_rooms intervals =
let n = List.length intervals in
let arr = Array.of_list intervals in
let starts = Array.make n 0 in
let ends = Array.make n 0 in
for i = 0 to n - 1 do
let (s, e) = arr.(i) in
starts.(i) <- s;
ends.(i) <- e
done;
let bubble a =
for i = 0 to n - 1 do
for j = 0 to n - 2 - i do
if a.(j) > a.(j + 1) then begin
let t = a.(j) in
a.(j) <- a.(j + 1);
a.(j + 1) <- t
end
done
done
in
bubble starts;
bubble ends;
let rooms = ref 0 in
let busy = ref 0 in
let i = ref 0 and j = ref 0 in
while !i < n do
if starts.(!i) < ends.(!j) then begin
busy := !busy + 1;
if !busy > !rooms then rooms := !busy;
i := !i + 1
end else begin
busy := !busy - 1;
j := !j + 1
end
done;
!rooms
;;
min_rooms [(0, 30); (5, 10); (15, 20); (10, 25); (5, 12); (20, 35); (0, 5); (8, 18)]