博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
给定一个数组,当中有正负数,求当中的一段“子数组”(即任意长度,连续的数字), 使得这个“子数组”的和是所有“子数组”和中最大的...
阅读量:4663 次
发布时间:2019-06-09

本文共 970 字,大约阅读时间需要 3 分钟。

package test;import java.util.Arrays;/** * 给定一个数组,当中有正负数,求当中的一段“子数组”(即任意长度,连续的数字), * 使得这个“子数组”的和是所有“子数组”和中最大的; * 如给定的数组为{12,-8, 5, 66, -21, 0 ,35, -44,7},  * 则最大的和的子数组为{12, -8, 5, 66, -21, 0,35}; * */public class MaxTest {	public static void main(String[] args) {		int[] data = { 12, -8, 5, 66, -21, 0, 35, -44, 7 };		data = maxData(data);		System.out.println(Arrays.toString(data));	}	// 未考虑两种情况:1.全是负数; 2.数组如{8, -8, 5, 6}	public static int[] maxData(int[] data) {		// 记录 开始与结束 的下标值		int first = 0, end = 0; 				int maxSum = 0, thisSum = 0;		for (int i = 0, j = 0; i < data.length; i++) {			thisSum += data[i];			if (thisSum > maxSum) {				maxSum = thisSum;				first = j; // first为上次和小于0的值				end = i;			}			if (thisSum < 0) {				thisSum = 0;				j = i + 1;			}		}		System.out.println("最大值:" + maxSum + " 下标值: " + first + " -- " + end);			// 可以使用Arrays的方法来获取数组		return Arrays.copyOfRange(data, first, end + 1);	}}

转载于:https://www.cnblogs.com/xiaozhang2014/p/5297281.html

你可能感兴趣的文章
11-3 多道批处理系统
查看>>
linux安装nginx
查看>>
Jwt在javaweb项目中的应用核心步骤解读
查看>>
[Vue] : Vue指令
查看>>
捆绑和缩小(BundleConfig.RegisterBundles) 第五章 : MVC中的使用 | {version}用法
查看>>
spring boot 使用 HandlerInterceptor
查看>>
[Delphi]接口认识
查看>>
oracle 安装
查看>>
ssh scp ssh-copy-id 非22端口的操作方法
查看>>
Spring MVC 的@RequestParam注解和request.getParameter("XXX")
查看>>
iOS 带IAP提交注意事项及无法submit for review的解决方案
查看>>
用js给元素加css
查看>>
Objective-C基础1:OC中类的继承和组合
查看>>
转载牛人的英语学习方法,值得学习
查看>>
iOS的开发工具介绍
查看>>
switch 语句来选择要执行的多个代码块之一。
查看>>
【Java】 剑指offer(30) 包含min函数的栈
查看>>
cer pfx格式数字证书区别
查看>>
2013.11.24 流水
查看>>
Oracle设置主键自增长
查看>>