[英]How to find the first maximum in c++?
我搜索最长范围的数组。 数组元素为:2 3 4 7 8,结果为 2-4。 如果数组有 2 个或更多相同的范围怎么办。 怎样才能找到第一个?
for (int i = 0; i < n-1; i++) {
if (t[i] == t[i+1] -1) {
cur++;
}
else {
if (cur> max) {
max = cur;
first= cur_first;
last= t[i];
}
cur= 1;
cur_first= t[i+1];
}
}
if (cur> max) {
cur= max;
first= cur_first;
last= t[n-1];
}
如果您在内部添加另一个循环只是为了获取范围,它会更简单(更快)。
int t[] = {2,3,4,7,8,2,3,4};
int n = sizeof(t)/sizeof(t[0]);
struct {
int idx; //start index.
int len; //length of range.
} cur, max = {0,1};
for (int i = 0; i < n-1; i++) {
//---get the current range.
cur.len = 1;
cur.idx = i;
while(t[i]==t[i+1]-1){
cur.len++; i++;
if(i >= n-1) break;
}
//---save the range with maximum length.
if(cur.len > max.len){
max = cur;
if(max.len > n-i-1) break; //optimization code. can be optional.
}
}
printf("max range: idx=%d; len=%d; firstValue=%d",max.idx, max.len, t[max.idx]);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.