求解最大连续子序列的和以及最大连续子序列

本文介绍了如何使用蛮力法、分治法和动态规划法求解最大连续子序列的和以及最大连续子序列。详细阐述了每种方法的基本思想和算法设计,包括初始化、子问题求解和结果合并过程,并提供了相应的代码实现。通过这些方法,可以高效地找出给定数组中的最大连续字段和及其起始和结束位置。
摘要由CSDN通过智能技术生成

前言

使用蛮力法、分治法、动态规划法求解最大连续子序列的和以及最大连续子序列


`注意:以下是本人对该问题的理解以及解题思路,如有错误地方,欢迎大家指出

一、蛮力法求解

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
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值