ocaml: phase 5.1 min_subarr_target.ml baseline (min subarray sum >= 7 = 2)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 24s

Classic two-pointer / sliding window: expand right, then shrink
left while the window still satisfies the >= constraint, recording
the smallest valid length.

  for r = 0 to n - 1 do
    sum := !sum + arr.(r);
    while !sum >= target do
      ... record (r - !l + 1) if smaller ...
      sum := !sum - arr.(!l);
      l := !l + 1
    done
  done

For [2; 3; 1; 2; 4; 3], target 7 -> window [4, 3] of length 2.

Sentinel n+1 marks "not found"; final guard reduces to 0.

Tests for + inner while shrinking loop, ref-tracked sum updated
on both expansion and contraction.

194 baseline programs total.
This commit is contained in:
2026-05-11 04:24:29 +00:00
parent bf468e5ec3
commit 33be068c01
3 changed files with 28 additions and 0 deletions

View File

@@ -125,6 +125,7 @@
"merge_sort.ml": 44,
"merge_two.ml": 441,
"min_cost_path.ml": 12,
"min_subarr_target.ml": 2,
"module_use.ml": 3,
"monotonic.ml": 4,
"newton_sqrt.ml": 1414,

View File

@@ -0,0 +1,19 @@
let min_subarr_sum_at_least arr target =
let n = Array.length arr in
let best = ref (n + 1) in
let sum = ref 0 in
let l = ref 0 in
for r = 0 to n - 1 do
sum := !sum + arr.(r);
while !sum >= target do
let len = r - !l + 1 in
if len < !best then best := len;
sum := !sum - arr.(!l);
l := !l + 1
done
done;
if !best > n then 0 else !best
;;
min_subarr_sum_at_least [| 2; 3; 1; 2; 4; 3 |] 7

View File

@@ -407,6 +407,14 @@ _Newest first._
binary search tree (`type 'a tree = Leaf | Node of 'a * 'a tree *
'a tree`) with insert + in-order traversal. Tests parametric ADT,
recursive match, List.append, List.fold_left.
- 2026-05-11 Phase 5.1 — min_subarr_target.ml baseline (sliding-
window min subarray with sum ≥ target on [2;3;1;2;4;3] target=7
= 2). Two-pointer: expand right, then shrink left while sum
stays ≥ target, recording the min length seen. Optimal window
is [4, 3] (positions 4-5) with sum 7, length 2. Tests `for` +
inner `while` shrinking loop, ref-tracked sum updated on both
expansion and contraction, sentinel `n + 1` for "not found".
194 baseline programs total.
- 2026-05-11 Phase 5.1 — min_meeting_rooms.ml baseline (sweep-line
for min concurrent meetings on 8 intervals = 4). Separate starts
and ends arrays sorted independently, then a two-pointer sweep: