天天看点

【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();
	}

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

解题思路二:

任意生成一个正负数混合的一维数组,还是进行挨个累加

但是只要判断每次累加后的结果为负数则舍弃,从后面的下标进行累加

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】算法之子数组中最大累加和