找到一个数组的第一个和最后一个索引,其元素从和到的顺序总和最大

劳拉

我有一个整数数组A [N]。我想找到索引n和m,使从第n个元素到第m个元素的顺序总和最大。搜索时间受N值限制。

这是我的代码:

    #include <iostream>
    #include <vector>
    using namespace std;

    int MaxSum(vector<int> &A){
    int N=A.size();
    int n=0;
    int m=0;
    int prev_max=A[0];
    int sol_max=A[0];
    for (int i=1; i<N; i++){
       prev_max=max(A[i], A[i]+prev_max);
       if (prev_max>=sol_max){
            sol_max=prev_max;
        }  
    }
    cout<<"m="<<m<<endl;
    cout<<"n="<<n<<endl;
 //   cout<<sol_max<<endl;
}

int main()
{
vector<int> a={{-2},{1},{-3},{4},{-1},{2},{1},{-5},{4}};//for example: n=3; m=6
 MaxSum(a);
}

我试图插入这些计数器,并且每次程序运行不正常时,原因很明显。但是,不幸的是,我不知道如何正确放置它们(希望您可以修复它

Al Mamun Akash

可以使用Kadane算法来解决这类问题,并且复杂度是线性的。

这个问题的主要思想是寻找阵列的正连续段。并在所有正连续段中找到最大和。并且也忽略具有负和的段(因为我们打算找到最大和)。

注意:如果所有值均为负,则此方法将失败。要解决此问题,您可以检查所有元素是否为负数并找到最大值。

int MaxSum(vector<int>&A) {
    int n=0,m=0;
    int max_so_far=0,max_ending_here=0;
    int prevIndex = 0;
    for(int i=0;i<A.size();i++) {
        max_ending_here += A[i];
        if(max_ending_here > max_so_far) {
            max_so_far = max_ending_here;
            n = prevIndex;
            m = i;
        }
        if(max_ending_here < 0) {
            max_ending_here = 0;
            prevIndex=i+1;
            prevIndex=i+1;
        }
    }

    cout<<"n: "<<n<<endl;
    cout<<"m: "<<m<<endl;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

保留数组的第一个索引元素和最后一个索引元素

减少数组到第一个和最后一个元素的元组?

如何找到一个数组在另一个数组中的出现?和第一个数组的返回索引

二维数组打印每行的第一个负数和最后一个之间的元素总和

忽略数组中的第一个和最后一个数字

熊猫=>按组获取第一个和最后一个元素的索引

PHP 数组中值出现的第一个和最后一个索引

将步骤数限制为第一个和最后一个数组元素

查找大于阈值的NumPy数组的第一个和最后一个元素

删除数组中的第一个和最后一个元素

NumPy数组中的第一个和最后一个元素

交换数组的所有元素,除了第一个和最后一个

排除数组的第一个和最后一个元素

查找数组中的第一个、最后一个和中间值。返回最大的一个

聚合+最后和第一个->丢失顺序

当第一个数字表示最后一个索引时如何找到数组中的最大差异

需要一个数组,其中新数组的第一个元素=除第一个元素以外的所有元素的和

从最后一个元素到第一个元素添加到数组

找到一行的第一个和最后一个跨度

减少ndarray的第一个维度-保留第一个和最后一个元素

Shell 程序打印第一个和最后一个参数及其总和

Python 列表的总和不添加第一个和最后一个

sed切换第一个和最后一个单词的顺序

TSQL - 范围内的第一个和最后一个数字

Python熊猫获得数据的第一个和最后一个索引,如果第一个也是最后一个,则重复

交替打印最后一个元素和第一个元素(JavaScript)

选择数组中N个均匀间隔的元素,包括第一个和最后一个

数组:如何在指定索引之前显示数组的第一个和最后一个元素以及数组元素的差异?

矢量如何找到第一个和最后一个当前值