访问:寻找非固定长度x的每个子阵列的最小的最大值,其中1 <= X <= N
您在阵列中给出Ñ号码。一个数字的一个组是阵列的非空连续区段。一个组的大小是该组中的号的数目。
让甲是一组中的最小数目。的任务是找到每个X(1 < = X < = N),的甲大小X的所有组中的最大值。例如,如果N = 3并且数组为[1,2,3],则答案将是3(x = 1),2(x = 2),1(x = 3) 。
数字可以在阵列(例如,在被重复,用于Ñ = 7,阵列可以是[1,2,3,4,5,4,6]。
对于解释,所述下面的C代码是一个天真的解决方案:
#include <stdio.h>
int main() {
int a[] = {6,1,3,2,5,4,7};
size_t N = sizeof a/sizeof *a;
for (size_t i=0; i<N; ++i) printf("%d ", a[i]); puts("\n");
size_t group_size, start, i;
int max, min;
for (group_size = 1; group_size <= N; ++group_size) {
max = 0;
for (start = 0; start <= N - group_size; ++start) {
min = a[start];
for (i = start + 1; i < start + group_size; ++i) {
if (a[i] < min)
min = a[i];
}
if (min > max)
max = min;
}
printf("%d ", max);
}
return 0;
}
输出:
6 1 3 2 5 4 7
7 4 4 2 2 1 1
我几次阅读你的描述,仍然无法调出你正在指定的内容。你能提供更多关于你如何到达“3,2,1”的例子吗? –
@SpecialSauce size = 1可能的连续子数组 - {1},{2},{3},现在最小值为3,size = 2,可能是连续的子数组{1,2} {2,3}。现在最小的最小值将是2,类似的size = 3,max的最小值将是1,所以答案是3,2,1 – user3703826