1. 程式人生 > 其它 >挑戰資料結構和演算法面試題——最大間隔

挑戰資料結構和演算法面試題——最大間隔

題目來自伯樂線上,歡迎有不同答案的同學來一起討論。

分析:

本題首先需要理解清楚最大間隔的最小:

  • 最初的間隔為:[1,1,4,1],此時最大間隔為4
  • 刪除2後的間隔為:[2,4,1],此時最大間隔為4
  • 刪除3後的間隔為:[1,5,1],此時最大間隔為5
  • 刪除7後的間隔為:[1,1,5],此時最大間隔為5

在刪除元素後的間隔為:[4,5,5],最小值為:4

方法:

int get_min_max_margin(int *a, const int n) {
  int *margin_array = (int *)malloc(sizeof(int)*(n-1));
  int max_ori = 0;
  int *p = margin_array;
  for (int i = 0; i < n-1; i++) {
    int margin = a[i+1] - a[i]; // 計算當前的間隔
    if (margin > max_ori) max_ori = margin;// 紀錄所有最大的間隔
    *p = margin;
    p ++;
  }
  // 開始計算
  int *q1 = margin_array;
  int min_num = max_ori + max_ori;
  for (int j = 0; j < n-2; j++) {
    int max_num = max_ori;
    int *q2 = q1 + 1;
    int margin_new = *q1 + *q2;
    if (margin_new > max_num) max_num = margin_new;
    if (min_num > max_num) min_num = max_num;
    q1 ++;
  }
  free(margin_array);
  return min_num;
}