Java算法之子数组中最大累加和

Posted 笔触狂放

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java算法之子数组中最大累加和相关的知识,希望对你有一定的参考价值。

题目:子数组中最大累加和

解题思路:
给定数组长度后,需要进行挨个累加,找出最大和的连续的数组
假设给定长度为4,那么第一轮就需要检测四边,需要检测第一个数,和第一个数加上第二个数之和的比较,找出最大值,再继续检测第一个数加上第二个数加上第三个数之和比较大小,直到获得第一轮里面累加和最大的连续子数组
在进行第二轮的检测,然后将第一轮的最大值和第二轮的最大值进行比较,获得最大的
在进行第三轮的检测,继续比较
在进行第四轮的检测,继续比较

package com.lqb2021;

import java.util.Random;
import java.util.Scanner;

public class T4_5 {

	private int[] nums=null;
	
	private void init() {
		System.out.println("请输入一维数组长度:");
		Scanner scanner=new Scanner(System.in);
		int n=scanner.nextInt();
		scanner.close();
		nums=new int[n];
		for (int i = 0; i < nums.length; i++) {
			nums[i]=(int)(Math.random()>0.3?new Random().nextInt(10)*-1:new Random().nextInt(10));
			System.out.print(nums[i]+"\\t");
		}
		
		print();
	}
	
	private void print() {
		int maxof=nums[0];
		
		for (int i = 0; i < nums.length; i++) {
			int sum=nums[i];
			int max=sum;
			for (int j = i+1; j < nums.length; j++) {
				sum+=nums[j];
				if (sum>max) {
					max=sum;
				}
			}
			
			if (max>maxof) {
				maxof=max;
			}
		}
		
		System.out.println("最大值为:"+maxof);

	}
	
	public static void main(String[] args) {
		new T4_5().init();
	}

}

解题思路二:
任意生成一个正负数混合的一维数组,还是进行挨个累加
但是只要判断每次累加后的结果为负数则舍弃,从后面的下标进行累加

package com.lqb2021;

import java.util.Random;
import java.util.Scanner;

public class T4_5_2 {

	private int[] nums=null;
	
	private void init() {
		System.out.println("请输入一维数组长度:");
		Scanner scanner=new Scanner(System.in);
		int n=scanner.nextInt();
		scanner.close();
		nums=new int[n];
		for (int i = 0; i < nums.length; i++) {
			nums[i]=(int)(Math.random()>0.3?new Random().nextInt(10)*-1:new Random().nextInt(10));
			System.out.print(nums[i]+"\\t");
		}
		
		print();
	}
	
	private void print() {
		int maxof=nums[0];
		int sum=maxof;
		int left=0,right=0;
		for (int i = 1; i < nums.length; i++) {
			if (sum>=0) {
				sum+=nums[i];
			}else {
				sum=nums[i];
				left=i;
			}
			
			if (sum>maxof) {
				maxof=sum;
				right=i;
			}
		}
		System.out.println();
		System.out.println("最大值的子数组的下标为:"+left+"--"+right);
		
		System.out.println("最大值为:"+maxof);

	}
	
	public static void main(String[] args) {
		new T4_5_2().init();
	}

}

以上是关于Java算法之子数组中最大累加和的主要内容,如果未能解决你的问题,请参考以下文章

java数据结构之子最大子数组和

数据结构与算法-子数组的最大累加和

算法总结之 子矩阵的最大累加和问题

Java算法之矩阵中子矩阵最大累加和

算法总结之 未排序数组中累加和小于或等于给定值的最长子数组长度

子矩阵最大累加和