zoukankan      html  css  js  c++  java
  • 2.14 子数组之和的最大值

    问题:

    求数组的子数组之和的最大值


    解法一:

    遍历

    #include <stdio.h>
    #include <stdlib.h>
    
    int MaxSum(int* A, int n)
    {
        int maximum = -100;
        int sum = 0;
        int i = 0, j = 0, k = 0;
        for (i = 0; i < n; i++)
        {
            for(j = i; j < n; j++)
            {
                for(k = i; k <= j; k++)
                {
                    sum += A[k];
                }
                if (sum > maximum)
                    maximum = sum;
            }
        }
        return maximum;
    }
    
    int main()
    {
        int array[] = {-9, -2, -3, -5, -3};
        printf("%d
    ", MaxSum(array, 5));
        return 0;
    }
    



    解法二:

    分治法,考虑A[0]以及最大的一段数组(A[i],...,A[j])之间的关系。

    1. 当0=i=j,元素A[0]本身构成和最大的一段。

    2. 当0=i<j,和最大的一段以A[0]开始。

    3. 当0<i时,元素A[0]跟和最大的一段没有关系。

    #include <stdio.h>
    #include <stdlib.h>
    
    int max(int x, int y)
    {
        return (x > y) ? x :y;
    }
    
    int MaxSum(int* array, int n)
    {
        int nStart = 0;
        int aAll = 0;
        int i = 0;
        nStart = array[n-1];
        aAll = array[n-1];
        for (i = n-2; i >= 0; i--)
        {
            nStart = max(array[i], nStart + array[i]);
            aAll = max(nStart, aAll);
        }
        return aAll;
    }
    
    int main()
    {
        int array[] = {-9, -2, -3, -5, -3};
        printf("%d
    ", MaxSum(array, 5));
        return 0;
    }
    


  • 相关阅读:
    找工作总结
    java设计模式2-观察者模式
    java设计模式1-策略模式
    Hadoop 集群常见错误
    hadoop的conf配置详解
    HDFS的数据导入到HIVE中
    hadoop集群搭建(完全分布式)
    FastDFS的学习
    FastDFS文档整理与研究
    把windows上文件上传到linux系统
  • 原文地址:https://www.cnblogs.com/pangblog/p/3310553.html
Copyright © 2011-2022 走看看