• dp_1: 最大连续子序列之和


    给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j <= K。最大连续子序列是所有连续子序中元素和最大的一个, 例如给定序列{ -2, 11, -4, 13, -5, -2 },其最大连续子序列为{ 11, -4, 13 },最大和为20。

    下面是程序:

    /**
     * Created by feng_sh on 4/10/2017.
     * 给定K个整数的序列{ N1, N2, ..., NK },
     * 其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j <= K。
     * 最大连续子序列是所有连续子序中元素和最大的一个,
     * 例如给定序列{ -2, 11, -4, 13, -5, -2 },
     * 其最大连续子序列为{ 11, -4, 13 },最大和为20。
     *
     * 递推关系式为: p[i] = max{p[i-1]+v[i], v[i]}
     * 空间复杂度O(n) 时间复杂度O(n)
     * i为第i个数, p为当前值, 第i个加入队列时的值 和 从当前开始最大的值
     */
    public class T1 {
    
        public static void main(String[] args) {
            Random random = new Random(47);
            int len = 20;
            // 
            int[] source = new int[len];
            int[] value = new int[len];
            int maxValue = 0;
            source[0] = random.nextInt(len / 2);
            value[0] = source[0];
            for (int i = 1; i < len; i++) {
                // 生成数据
                source[i] = (int) (random.nextInt(len / 2) * Math.pow(-1, random.nextInt()));
                // 利用递推方程进行计算
                value[i] = Math.max(value[i - 1] + source[i], source[i]);
                if (value[i] > maxValue) {
                    maxValue = value[i];
                }
            }
            // 源数组
            System.out.println(Arrays.toString(source));
            // 状态数组
            System.out.println(Arrays.toString(value));
            // 最大和
            System.out.println(maxValue);
            // 另一种空间优化方案的和
            optimize(source);
        }
    
        /**
         * 这里求出最大和,
         * 这一种方案空间复杂度O(1)
         */
        private static void optimize(int[] source) {
            int last = source[0];
            int max = last;
            for (int i = 1; i < source.length; i++) {
                last = Math.max(last + source[i], source[i]);
                if (last > max) {
                    max = last;
                }
            }
            System.out.println(max);
        }
    
    }
  • 相关阅读:
    sns矩阵
    家庭博客
    媒体治国
    论坛有
    模型指向同一地址,结构体指向不同地址
    苹果开发者公司账号添加个人开发者 加入不了开发者团队
    SourceTree下载 及使用
    关于swift语言中导入OC三方类找不到头文件的解决方法
    iPhone iPad 各种控件默认高度
    iOS 基于MVC设计模式的基类设计
  • 原文地址:https://www.cnblogs.com/weikongziqu/p/6693579.html
Copyright © 2020-2023  润新知