• Java实现最大连续子数组和


    1 问题描述
    给定一个整数数组,数组里可能有正数、负数和零。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。例如,如果输入的数组为{1,-2,3,10,-4,7,2,-5},和最大的子数组为{3,10,-4,7,2},那么输出为该子数组的和18。

    2 解决方案
    2.1 蛮力枚举法

    package com.liuzhen.array_2;
    
    public class MaxSubArray {
        
        public int bruteMethod(int[] A){
            int maxResult = A[0];        
            int maxTemp = 0;;
            for(int i = 0;i < A.length;i++){
                for(int j = i;j < A.length;j++){
                    for(int k = i;k <= j;k++){
                        maxTemp += A[k];
                    }
                    if(maxTemp > maxResult)
                        maxResult = maxTemp;
                    maxTemp = 0;             //完成一个子序列求和后,重新赋值为0
                }
            }
            return maxResult;
        }
        
        public static void main(String[] args){
            MaxSubArray test = new MaxSubArray();
            int[] A = {1,-2,3,10,-4,7,2,10,-5,4};
            System.out.println("使用蛮力法求解数组A的最大连续子数组和为:"+test.bruteMethod(A));
        }
    }
    

    运行结果:

    使用蛮力法求解数组A的最大连续子数组和为:28
    

    2.2 动态规划法

    package com.liuzhen.array_2;
    
    public class MaxSubArray {
        
        public int dynaticMethod(int[] A){
            int maxResult = A[0];   
            int maxTemp = 0;
            for(int i = 0;i < A.length;i++){
                if(maxTemp >= 0)
                    maxTemp += A[i];
                else
                    maxTemp = A[i];
                if(maxTemp > maxResult)
                    maxResult = maxTemp;
            }
            return maxResult;
        }
        
        public static void main(String[] args){
            MaxSubArray test = new MaxSubArray();
            int[] A = {1,-2,3,10,-4,7,2,10,-5,4};
            System.out.println("使用动态规划法求解数组A的最大连续子数组和为:"+test.dynaticMethod(A));
        }
    }
    

    运行结果:

    使用动态规划法求解数组A的最大连续子数组和为:28
    
  • 相关阅读:
    vue----计算与监听属性
    vue---条件与循环语句
    vue--模板语法
    git版本控制系统--介绍
    HttpWebRequest使用总结
    计算机专业的书普遍都这么贵,你们都是怎么获取资源的?
    130 个相见恨晚的超实用网站,一次性分享出来
    实现客户端与服务端的HTTP通讯
    默认网关(地址)
    .NET Reactor使用教程(加密源代码示例)
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12948038.html
Copyright © 2020-2023  润新知