zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    深度学习时代的图模型,清华发文综述图网络
    深入解析CNN pooling 池化层原理及其作用
    如何理解线性回归中的“回归”,回归到哪里?
    线性回归中“回归”的含义
    深度学习基础——Epoch、Iteration、Batchsize
    手动清空微信PC客户端数据
    Mini-batch 和batch的区别
    Python中绘制场景热力图
    HSV颜色识别-HSV基本颜色分量范围
    Android拨打接听电话自动免提
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12948037.html
Copyright © 2011-2022 走看看