zoukankan      html  css  js  c++  java
  • 连续子数组最大和

    http://www.ahathinking.com/archives/tag/%E6%9C%80%E9%95%BF%E9%80%92%E5%A2%9E%E5%AD%90%E5%BA%8F%E5%88%97
    求一个数组的相加和最大的连续子数组

    思路:
    一直累加,只要大于0,就说明当前的“和”可以继续增大,
    如果小于0了,说明“之前的最大和”已经不可能继续增大了,就从新开始,
    result=max{result+arr[i],arr[i]};//显然,若result>0,则可以继续相加,否则,就重新开始。

    #include<stdio.h>
    #define INF 65535
    
    int Maxsum(int * arr, int size)
    {
        int maxSum = -INF;
        int sum = 0;
        for(int i = 0; i < size; ++i)
        {
            if(sum < 0)
            {
                sum = arr[i];
            }else
            {
                sum += arr[i];
            }
            if(sum > maxSum)
            {
                maxSum = sum;
            }
        }
        return maxSum;
    }
    
    
    void Maxsum_location(int * arr, int size, int & start, int & end)
    {
        int maxSum = -INF;
        int sum = 0;
        int curstart = start = 0;  /* curstart记录每次当前起始位置 */
        for(int i = 0; i < size; ++i)
        {
            if(sum < 0)
            {
                sum = arr[i];
                curstart = i;     /* 记录当前的起始位置 */
            }else
            {
                sum += arr[i];
            }
            if(sum > maxSum)
            {
                maxSum = sum;
                start = curstart; /* 记录并更新最大子数组起始位置 */
                end = i;
            }
        }
    }
    
    
    void main()
    {
        /* 测试用例 */
        //int arr[] = {8,-10,3,60,-1,-6};
        int arr[] = {1,-2,3,5,-1,2};
        int arr2[] = {-9,-2,-3,-5,-4,-6};
        int len = sizeof arr / sizeof(int);
        int len2 = sizeof arr2 / sizeof(int);
     
        /* 测试实现 */
        printf("%d %d
    ",Maxsum(arr,len),Maxsum(arr2,len2));
     
        /* 返回起始位置 */
        int start = -1;
        int end = -1;
        Maxsum_location(arr,len,start,end);
        printf("start:%d end:%d
    ", start, end);
    
        Maxsum_location(arr2,len2,start,end);
        printf("start:%d end:%d
    ", start, end);
     
    }


  • 相关阅读:
    pytorch_模型参数-保存,加载,打印
    pytorch——auto-encoders
    tensor 中mul_,add_解读
    pytorch_13_pytorch 中tensor,numpy,PIL的转换
    Image-transpose
    torch_13_自定义数据集实战
    html5shiv.js让吃屎的IE6、IE7、IE8支持html5去吧
    jquery.placeholder.min.js让吃屎的IE浏览器支持placeholder去吧
    jQuery页面滚动图片等元素动态加载实现
    移动端页面应该使用什么字体?
  • 原文地址:https://www.cnblogs.com/sjw1357/p/3863994.html
Copyright © 2011-2022 走看看