Maximum Distance in Arrays

medium greedy array

Problem

Given m sorted arrays, return the max |a − b| where a and b come from different arrays.

Inputarrays=[[1,2,3],[4,5],[1,2,3]]
Output4
5 (from arr[1]) − 1 (from arr[0]) = 4.

def max_distance(arrays):
    lo, hi = arrays[0][0], arrays[0][-1]; best = 0
    for a in arrays[1:]:
        best = max(best, a[-1] - lo, hi - a[0])
        lo = min(lo, a[0]); hi = max(hi, a[-1])
    return best
function maxDistance(arrays) {
  let lo = arrays[0][0], hi = arrays[0][arrays[0].length - 1], best = 0;
  for (let i = 1; i < arrays.length; i++) {
    const a = arrays[i];
    best = Math.max(best, a[a.length - 1] - lo, hi - a[0]);
    lo = Math.min(lo, a[0]); hi = Math.max(hi, a[a.length - 1]);
  }
  return best;
}
int maxDistance(List> arrays) {
    int lo = arrays.get(0).get(0), hi = arrays.get(0).get(arrays.get(0).size() - 1), best = 0;
    for (int i = 1; i < arrays.size(); i++) {
        List a = arrays.get(i);
        best = Math.max(best, Math.max(a.get(a.size()-1) - lo, hi - a.get(0)));
        lo = Math.min(lo, a.get(0)); hi = Math.max(hi, a.get(a.size()-1));
    }
    return best;
}
int maxDistance(vector>& arrays) {
    int lo = arrays[0].front(), hi = arrays[0].back(), best = 0;
    for (int i = 1; i < (int)arrays.size(); i++) {
        auto& a = arrays[i];
        best = max({best, a.back() - lo, hi - a.front()});
        lo = min(lo, a.front()); hi = max(hi, a.back());
    }
    return best;
}
Time: O(m) Space: O(1)