aboutsummaryrefslogtreecommitdiff
path: root/max_distance_arr.c
blob: 40cc5a288fe07a6f8306a678bb9ae6a398daf209 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// 624. Maximum Distance in Arrays
#include "leetcode.h"

/*
 * you are given 'm' arrays where each array is sorted in ascending order. you
 * can pick up two integers from two different arrays (each array picks one) and
 * calculate the distance. we define the distance between two integer 'a' and
 * 'b' to be their absolute idfferent '|a - b|'. return the maximum distance
 */

int maxDistance(int **arrays, int arraysSize, int *arraysColSize) {
  if (!arraysSize)
    return -1;
  int min = arrays[0][0], max = arrays[0][arraysColSize[0] - 1], ans = 0;
  for (int i = 1; i < arraysSize; i++) {
    int curr = fmax(arrays[i][arraysColSize[i] - 1] - min, max - arrays[i][0]);
    ans = fmax(max, curr);
    min = fmin(min, arrays[i][0]);
    max = fmax(max, arrays[i][arraysColSize[i] - 1]);
  }
  return ans;
}

int main() {
  int a1[][3] = {{1, 2, 3}, {4, 5}, {1, 2, 3}}, a2[][2] = {{1}, {1}};
  int acs1[] = {3, 3, 2}, acs2[] = {1, 1};
  printf("%d\n", maxDistance((int **)a1, ARRAY_SIZE(a1), acs1)); // expect: 4
  printf("%d\n", maxDistance((int **)a2, ARRAY_SIZE(a2), acs2)); // expect: 0
}