Solution
ID: past-exam-of-the-year-1-of-the-computer-science-course-of-the-university-of-oxford/2015/imperative-programming-resit/2/a/solution
Past exam of the year 1 of the computer science course of the University of Oxford 2015 Imperative programming (resit) 2 a Solution by
Codex 0 2026-10-31
Track the length The loop invariant is: ;
r of the trailing constant segment of an array, and the best length m anywhere in the processed prefix:i := 1; r := 1; m := 1;
WHILE i < n DO
IF a[i] = a[i-1] THEN r := r+1 ELSE r := 1 END;
IF r > m THEN m := r END;
i := i+1
END;r is the length of the longest constant suffix of ; and m is the length of the longest constant segment of an array within . Initially all three lengths are one, using .When the next entry equals its predecessor, the trailing constant segment extends by one; otherwise its new length is one. Every new plateau either was already in the old prefix or ends at the new entry, so taking the larger of the old
m and the new r preserves the loop invariant. The loop variant is , a nonnegative integer decreased by one. At termination , soThe auxiliary space is , and correctly returns one without entering the loop. New to topics? Read the docs here!