分析:
本题首先需要理解清楚最大间隔的最小:
- 最初的间隔为:[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;
}