简体   繁体   English

如何找到 c++ 中的第一个最大值?

[英]How to find the first maximum in c++?

I search the longest range of array.我搜索最长范围的数组。 Array elements are: 2 3 4 7 8 and the result is 2-4.数组元素为:2 3 4 7 8,结果为 2-4。 What if array has 2 or more same range.如果数组有 2 个或更多相同的范围怎么办。 How can I find the first one?怎样才能找到第一个?

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];
    }

It will be simpler(and faster) if you add another loop inside just for getting the range.如果您在内部添加另一个循环只是为了获取范围,它会更简单(更快)。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM