zoukankan      html  css  js  c++  java
  • 连续子元素最大和

    n^2解法

            /**
             * 1. 如果有连续的正数,那么只要考虑第一个。因为假设某个子串的和是最大的,但这个子串首位前一个是个正数,
             * 那么这个子串加上这个正数形成的子串和会更大,产生了矛盾,因此假设不成立。
             * 2. 所以最大和的子串前一位必为负数(0、或没有数)
             */
            int arr[] = {8, -2, 5, 1, -4, 7, 6, -9, 1, 13};
            int max = Integer.MIN_VALUE;
            for (int i = 0; i < arr.length; i++) {
                if (arr[i] > 0 && i > 0 && arr[i - 1] < 0 || arr[i] > 0) {
                    int sum = 0;
                    for (int j = i; j < arr.length; j++) {
                        sum += arr[j];
                        if (sum > max) {
                            max = sum;
                        }
                    }
                }
            }
            System.out.println(max);
    

    n解法(动态规划)

    状态转移方程为:
    MaxSum[i] = Max{ MaxSum[i-1] + A[i], A[i]}
    MaxSum[i]表示下标为i及以前的序列中的连续子元素最大和
    A[i]表示下标为i的元素值

    int MaxSubSequence(int A[], int N) {
            int ThisSum, MaxSum, j;
            ThisSum = MaxSum = 0;
            for (j = 0; j < N; j++) {
                ThisSum += A[j];
    
                if (ThisSum > MaxSum)
                    MaxSum = ThisSum;
                else if (ThisSum < 0)   // 相当于前面就是一个负数了,所以舍弃(解法一第二点规则)
                    ThisSum = 0;
            }
            return MaxSum;
        }
    
  • 相关阅读:
    Java文件流应用:复制文件
    Java IO流之文件流
    初识Java-IO流
    Java集合之Properties
    Java之FilenameFilter接口
    Java之File类
    Java内部类
    Java常用类之要点总结
    Java异常类(Throwable)
    php分布式缓存系统 Memcached 入门
  • 原文地址:https://www.cnblogs.com/zyoung/p/6724462.html
Copyright © 2011-2022 走看看