java实现最大连续和问题
/*
   10 5 -3 12 -31 15 22 -7 6 -8 -9 10 ....
   暴力:O(n^3)
   分治:[      mid   )  三种情况求最大
   基线法: O(n)
      2个数组:
      从左到本位:出现的最大累加
      从左到本位:累加的最小值
   网搜:最大连续和
*/
public class A
{
	// 对a, [p,q) 区间求最大连续和
	public static int g(int[] a, int p, int q)
	{
		if(q-p==1){
			if(a[p]>0) return a[p];
			return 0;
		}
		int mid = (p+q)/2;
		int max = 0;
		int m1 = g(a,p,mid);
		if(m1>max) max = m1;
		int m2 = g(a,mid,q);
		if(m2>max) max = m2;
		// 中间向左扩展搜索
		int m3a=0;
		int sum = 0;
		for(int i=mid; i>=p; i--){
			sum += a[i];
			if(sum>m3a) m3a = sum;
		}
		// 中间向右扩展搜索
		int m3b=0;
		sum = 0;
		for(int i=mid+1; i<q; i++){
			sum += a[i];
			if(sum>m3b) m3b = sum;
		}
		int m3 = m3a + m3b;
		if(m3>max) max = m3;
		return max;
	}
	public static int f(int[] a)
	{
		int max = 0;
		for(int i=0; i<a.length; i++)
		for(int j=i+1; j<a.length+1; j++){
			int sum = 0;
			for(int k=i; k<j; k++) sum += a[k];
			if(sum > max) max = sum;
		}
		return max;
	}
	public static void main(String[] args)
	{
		final int N = 2000; 
		int[] a = new int[N];
		for(int i=0; i<a.length; i++){
			a[i] = (int)(Math.random() * 100) - 50;
		}
		System.out.println(f(a));
		System.out.println("-----------------------");
		System.out.println(g(a,0,a.length));
	}
}
												
											java实现最大连续和问题的更多相关文章
- [ACM_水题] ZOJ 3714 [Java Beans 环中连续m个数最大值]
		
There are N little kids sitting in a circle, each of them are carrying some java beans in their hand ...
 - 疑难杂症:Java中Scanner连续获取int和String型发生错误.
		
使用Scanner类获取输入,连续获取int类型和String类型数据时候,发生错误. Scanner sc = new Scanner(System.in); System.out.println( ...
 - Java实现最大连续子数组和
		
1 问题描述 给定一个整数数组,数组里可能有正数.负数和零.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值.例如,如果输入的数组为{1,-2,3,10,-4, ...
 - Java实现最大连续乘积子数组
		
1 问题描述 给定一个浮点数组,任意取出数组中的若干个连续的数相乘,请找出其中乘积最大的子数组. 2 解决方案 2.1 蛮力法 该方法的时间复杂度为O(n^2). package com.liuzhe ...
 - java实现递归连续数
		
递归连续数 以下程序打印出0~9的数字,请补充缺少的代码. public class MyTest { public static void f(int begin, int end) { _____ ...
 - java中DatagramSocket连续发送多个数据报包时产生丢包现象解决方案
		
try { //向指定的ip和端口发送数据~! //先说明一下数据是谁发送过来的! byte[] ip = InetAddress.getLocalHost().getHostAddress().ge ...
 - Java数组(初学者必看)
		
数组无论在哪种编程语言中都算是最重要的数据结构之一,同时不同语言的实现及处理也不尽相同.但凡写过一些程序的人都知道数组的价值及理解数组的重要性,与链表一道,数组成为了基本的数据结构.尽管Java提供了 ...
 - Java对象的创建 —— new之后JVM都做了什么?
		
Java对象创建过程 1. 类加载检查 虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载.解析和初始化过.如果没 ...
 - Java SE之基本程序设计结构
		
概述: 0.注释 1.基本数据类型(有且仅有8个): 1.1 整型:int,short,long,byte(表示一个字节,[-128,127]) 1.2 ...
 
随机推荐
- webview的简单介绍和手写一个H5套壳的webview
			
1.webview是什么?作用是什么?和浏览器有什么关系? Webview 是一个基于webkit引擎,可以解析DOM 元素,展示html页面的控件,它和浏览器展示页面的原理是相同的,所以可以把它当做 ...
 - Mockito如何mock一条链式调用
			
在写单元测试的时候,不免可能需要mock一些对象出来,并且mock一些方法调用去返回一个自己想要的对象.一般的使用是这样的: FinalPumpkin pumpkin = mock(FinalPump ...
 - Atcoder Beginner Contest 166
			
VP赛况如下: 前言:感觉这一场题目难度还是比较贴近新生的,我一个codeforces小蓝名一小时居然AK了,F题数据有点水(?)暴力dfs居然都能过... A:A?C 题意:给你字符串,如果字符串是 ...
 - 12个让您震撼的Linux终端命令
			
以下快捷键很有用,可以节省你的时间: CTRL+U: 从光标处删除文本直到行首. CTRL+K: 从光标处删除文本直到行尾. CTRL+Y: 粘贴文本. CTRL+E: 将光标移动到行尾. CTRL+ ...
 - npm WARN enoent ENOENT: no such file or directory
			
https://github.com/visionmedia/debug/issues/261
 - babel转码时generator的regeneratorRuntime
			
今天写generator函数时发现出错:regeneratorRuntime. 在stackoverflow网友说需是本地babel软件包没有安装完全. package.json: "dev ...
 - TCP三次握手的seq和ack号的【正确】理解
			
1 理论知识 先上一张图,TCP/IP详解第18章的这张图描述了一个正常的三次握手和四次挥手的状态迁移,以及seq.ack序号的变化. 基本状态看图就能了解,本文主要围绕序号的变化进行讲解. 1)se ...
 - Pyqt5_QMessageBox
			
QMessageBox header:会话窗标题 info:会话窗内容 #弹出5种不同类型的消息框 reply1=QMessageBox.information(self,"title&qu ...
 - ssserver多出口ip
			
环境:centos6.10-7x(虚拟机),配置好之后至少保证能上网 需求:在一台服务器上配置多ip,并实现,用哪个ip 作为代理,访问ip138.com这类的网站的时候就返回对应的ip. 实现步骤: ...
 - MarkDown语法使用(效果版本)
			
function syntaxHighlighting() { var n = 33; var s = "hello, こんにちは"; console.log(s); } plai ...