面试题:最大的子数组之和,和最大子数组的始末位置

来源:互联网 发布:淘宝恢复淘宝客权重 编辑:程序博客网 时间:2024/05/20 05:59

给出一个数组,求出最大子数组的和以及始末位置。
直接给出代码解释:

int sub_array(int *array,int n){    int max2 = -INF;    int sum = 0;    int cur = 0;    int count2 = 0;    int flag;    int _end;    /*时间复杂度:o(n) 空间复杂度:o(1) */    while(cur < n)    {        /*记录最后一次max改变的位置*/        _end = cur;        sum += array[cur++];        if(sum > max2)        {            max2 = sum;            flag = _end;        }        if(sum < 0)        {            sum = 0;            /*如果当前的和是小于的 就取当前的位置下一个位置作为开始*/            count2 = cur;        }    }    cout << "from " << count2 << "to = " << flag << endl;    return max2;}
const int INF = 1<<31;int sub_array(int a[],int len){    int MAX = -INF;    int sum = 0;    int cur = 0;    int last = 0;    for(int i=0;i<len;i++)    {        sum += a[i];        if(sum > MAX)        {            MAX = sum;            //记录最后一次改变的位置            last = i;        }        if(sum < 0)        {            sum = 0;            //最后一次改变的时候,当前位置小于0,从下一位置开始            cur = i+1;        }    }    for(int k=cur;k<=last;k++)    {        cout << a[k] << " ";    }    cout << endl;    cout << "from " << cur << "to " << last << endl;    cout << MAX << endl;    return MAX;}
1 0
原创粉丝点击