挑戰資料結構和演算法面試題——最大間隔
阿新 • • 發佈:2022-05-04
題目來自伯樂線上,歡迎有不同答案的同學來一起討論。
分析:
本題首先需要理解清楚最大間隔的最小:
- 最初的間隔為:[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; }