我搜索数组的最长范围。数组元素为: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]);
关于c++ - 如何在 C++ 中找到第一个最大值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58663638/