c++ - 如何在 C++ 中找到第一个最大值?

标签 c++ arrays range

我搜索数组的最长范围。数组元素为: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/

相关文章:

c++ - Range-for-loops 和 std::vector<bool>

带有范围控制的 VB.Net slider

c++ - 如何实现一个 REST API 服务器?

c++ - C++ 中的通用访问者基类模板 - 重载问题

arrays - Tcl 8.4数组键设置无法接受内联函数调用

arrays - 如何初始化非常大的数组的 Vec?

c++ - 在 C++ 中回调类成员

c++ - 尾随空格是什么意思,它与空白有什么区别?

java - 如何在数组中添加或删除值?

Excel VBA : Get the Workbook associated with a range