码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-06-16 21:16:41      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:

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

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

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

标签:

原文地址:http://blog.csdn.net/xd_122/article/details/46522211

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!