算法导论4线性时间与暴力寻找最大子数组

// liner_time_max_subarray.cpp
#include <iostream>
#include <stdio.h>

int my_sum(int const * p, int const n, int & begin, int & end)
{
    int max;
    int sum;
    int max_all = p[0];
    unsigned int b = 0;
    unsigned int e = 0;

    for (int i = 0; i < n; ++i)
    {
        sum = 0;
        max = p[i];
        for (int j = i; j < n; ++j)
        {
            sum += p[j];
            if (sum > max)
            {
                max   = sum;
                b = i;
                e = j;
            }
        }
        if (max > max_all)
        {
            max_all = max;
            begin = b;
            end   = e;
        }
    }
    return max_all;
}

int main()
{
    int a[] = { 1, -2, 3, 10, -4, 7, 2, -5 };
    int i = 0;
    int j = 0;
    std::cout << my_sum(a, sizeof(a)/ sizeof(int), i, j) << std::endl;
    for (int m = i; m < j; m++)
    {
        std::cout << a[m] << " ";
    }
    std::cout << std::endl;
    getchar();
    return 0;
}
 
#include<stdio.h>
#include<stdlib.h>
#include<limits.h>
int maxsubset(int* a, int len) // 暴力violate
{
    int summax = INT_MIN;
    int i, j, k;
    for(i = 0; i < len; i++)
    {
        for(j = i; j < len; j++)
        {
            int temp = 0;
            for(k = i; k <= j; k++)
                temp += a[k];
            if(temp > summax)
                summax = temp;
        }
    }
    return summax;
}

int main()
{
    int a[] = { 1, -10, 2, 4, 6, -15, 6, 1, 9, -8 };
    printf("the maxsubset:%d
", maxsubset(a, sizeof(a) / sizeof(int)));
    getchar();
    return 0;
}

def84148de51967ffb931587e0b96a89 (1)

原文地址:https://www.cnblogs.com/sunyongjie1984/p/4271044.html