前言
使用蛮力法、分治法、动态规划法求解最大连续子序列的和以及最大连续子序列
`注意:以下是本人对该问题的理解以及解题思路,如有错误地方,欢迎大家指出
一、蛮力法求解
1.算法基本思想
蛮力法是一种简单直接地解决问题的方法,常常直接基于问题的描述进行求解
2.算法设计
第一步:初始化变量max用来存储最大值,变量left和right用于存储最大字段和的起始和终止下标
第二步:for循环i从第1个数到第N个数:
初始化变量b用于存储从i到内层for循环j的的和
for循环j从第i个数到第N个数:
b+=a[j];
判断b和max的值进行取舍如果b>max说明当前找到最大值并且当前最大子序列从i到j,更新left和right指向
第三步:当双层for循环结束后max中存储的是最大连续字段的和,left和righ分
别指向最大字段和的起始和结束位置
代码如下:
import java.util.Scanner;
public class Main1 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int c=sc.nextInt();
int a[]=new int[c];
int sum[]=new int[c];//用于值记录
for(int i=0;i<c;i++) {
a[i]=sc.nextInt();
}
int max=0,start=0,end=0;
for(int i=0;i<c;i++) {
//用于最大字段的开始位置
int b=0;
for(int j=i;j<c;j++) {
//用于找出以i开头的最大字段
b=b+a[j];//用于存储从i到j的的和
if(max<b) {
max=b;//更新最大字段和的值
start=i;end=j;//更新起始和终止下标
}
}
}
System.out.println(max);
for(int i=start;i<=end;i++) {
System.out