题目来自伯乐在线,欢迎有不同答案的同学来一起讨论。
分析:
本题首先需要理解清楚最大间隔的最小:
在删除元素后的间隔为:[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; }
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。
我来说两句