首页 > 解决方案 > 如何在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];
    }

标签: c++arraysrange

解决方案


如果您在内部添加另一个循环只是为了获取范围,它会更简单(更快)。

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

推荐阅读