返回一个整数数组中最大子数组的和——java程序设计
一、题目要求
1、输入一个整形数组,数组里有正数也有负数。
2、数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
3、求所有子数组的和的最大值。要求时间复杂度为O(n)
二、设计思想
解决方案一:
1、通过用户输入数组容量,随机产生一个整型数组
2、将数组元素依次相加进行判断,当遇到小于0的数时停止相加(因为要求最大子数组的和,加上小于0的数会让子数组和变小)
3、遍历相加的过程中不断更新子数组的和sum以及最大值max的值
4、遍历完成后输出max值即可
解决方案二:
1、通过用户输入数组容量,随机产生一个整型数组
2、通过循环遍历所有元素求出以该元素为首节点的所有子数组的和,将其存入一个list中
3、求出list的最大值
三、源代码
由于解决方案二的复杂度高于解决方案一,这里只给出解决方案一的代码
public static int getResult(ArrayList<Integer> array) {
int sum = 0;
int result = array.get(0);
for (Integer integer : array) {
if(sum<=0)
sum = integer;
else
sum += integer;
if(sum>result)
result = sum;
}
return result;
}
四、扩展
若将原数组首尾相连改为环状数组,求其最大子数组的和解决方案如下:
1、通过用户输入数组容量,随机产生一个整型数组
2、遍历数组中的所有元素,保证让其每个元素都作为一次首节点,将其前面的元素拼到原数组最后使其成为一个新数组
3、对每个新数组求一次最大子数组
4、将所有最大子数组的值比较大小,输出最大值
源代码如下:
import java.util.ArrayList;
import java.util.Scanner; public class FirstTest { public static int getResult(ArrayList<Integer> array) {
int sum = 0;
int result = array.get(0);
for (Integer integer : array) {
if(sum<=0)
sum = integer;
else
sum += integer; if(sum>result)
result = sum;
}
return result;
} public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int num=input.nextInt();
int array[]=new int[num];
ArrayList<Integer> result = new ArrayList<>(); for(int i=0;i<num;i++)
{
if((int)(Math.random()*2)==0)
{
array[i]=(int)(Math.random()*10);
}
else
{
array[i]=-(int)(Math.random()*10);
}
}
for(int i=0;i<num;i++) {
System.out.println(array[i]);
} for(int i=0;i<num;i++) {
ArrayList<Integer> list = new ArrayList<>();
for(int j=i;j<num;j++) {
list.add(array[j]);
}
for(int k=0;k<i;k++) {
list.add(array[k]);
}
result.add(getResult(list));
}
int max = result.get(0);
for (Integer integer : result) {
if(max<integer)
max = integer;
} System.out.println(max);
} }
运行结果截图:

返回一个整数数组中最大子数组的和——java程序设计的更多相关文章
- 软件工程结对开发——返回一个整数数组中最大子数组的和(JAVA)
题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整型数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为 ...
- 使用jQuery匹配文档中所有的li元素,返回一个jQuery对象,然后通过数组下标的方式读取jQuery集合中第1个DOM元素,此时返回的是DOM对象,然后调用DOM属性innerHTML,读取该元素 包含的文本信息
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 求一个数组的最大子数组(C/C++实现)
最大子数组:要求相连,加起来的和最大的子数组就是一个数组的最大子数组.编译环境:VS2012,顺便说句其实我是C#程序员,我只是喜欢学C++. 其实这是个半成品,还有些BUG在里面,不过总体的思路是这 ...
- 4.产生10个1-100的随机数,并放到一个数组中 (1)把数组中大于等于10的数字放到一个list集合中,并打印到控制台。 (2)把数组中的数字放到当前文件夹的numArr.txt文件中
package cn.it.text; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayLis ...
- Task 4.3 求环形数组的最大子数组和
任务要求:输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n- ...
- 字串符相关 split() 字串符分隔 substring() 提取字符串 substr()提取指定数目的字符 parseInt() 函数可解析一个字符串,并返回一个整数。
split() 方法将字符串分割为字符串数组,并返回此数组. stringObject.split(separator,limit) 我们将按照不同的方式来分割字符串: 使用指定符号分割字符串,代码如 ...
- 求解数组环中最大子数组和的问题(java)
//石家庄铁道大学 信1405-1 班 唐炳辉 在上一次作业中,对于普通数组的最大子数组的求解问题的基础上,将普通的数组变成一个首尾相接的环,求这个环的最大子数组.类似的,只要改变普通数组的数组位置, ...
- [Jobdu] 题目1527:首尾相连数组的最大子数组和
题目描述: 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是相连的.数组中一个或多个连续元素可以组成一个子数组,其中存在这样的子数组arr[i],…arr ...
- 蚂蚁的难题(二)首尾相连数组的最大子数组和(DP)
蚂蚁的难题(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 下雨了,下雨了,蚂蚁搬家了. 已知有n种食材需要搬走,这些食材从1到n依次排成了一个圈.小蚂蚁对每种食材 ...
随机推荐
- openlayer3 坐标系转换
'EPSG:4326'-经纬度坐标-WGS84'EPSG:3857'- xy坐标-web墨卡托 ol3默认的坐标系为3857,即在创建ol.map的时候,若不指定projection,则默认为EPSG ...
- React脚手架解决不能使用less问题
引言 学编程,还是多敲代码呀,React脚手架不支持less,因此需要配置webpack的webpack.config.js文件 释放配置文件 我们在使用React脚手架的时候,发现发现是没有webp ...
- provider networks和self-service networks
Provider Network 服务布局 Self-Service Network 网络布局: 网络布局 Provider Networks概述 Provider networks - Conne ...
- 死磕mysql(2)
想测试自己的查询语句,导入批量的数据,一开始很慢以为是自己的语句有问题,后来是这个autocommit,效率相差好多好多............ delimiter // create procedu ...
- Spring注入bean的方式
在Spring容器中为一个bean配置依赖注入有三种方式: · 使用属性的setter方法注入 这是最常用的方式: · 使用构造器注入: · 使用Filed注入(用于注解方式). 使用属性的se ...
- fgets汉字问题
#include<stdio.h> #include <stdlib.h> #define N 10 int main(int argc, char *argv[]) { FI ...
- [Python源码剖析]字符缓冲池intern机制
static PyStringObject *characters[UCHAR_MAX + 1]; ... /* This dictionary holds all interned strings. ...
- BZOJ 2733 [HNOI2012]永无乡 (权值线段树启发式合并+并查集)
题意: n<=1e5的图里,在线连边.查询某连通块第k大 思路: 练习线段树合并的好题,因为依然记得上一次启发式合并trie的时候内存爆炸的恐怖,所以这次还是用了动态开点.回收 听说启发式合并s ...
- How to check sqlsever table data type identity status ?
Unlike in Oracle, sqlserver has an special data type in order by make identity growth. But what abou ...
- SpringBoot Jpa 分页查询最新配置方式
这是已经被废弃的接口 Sort sort = new Sort(Sort.Direction.DESC,"bean类中字段"); //创建时间降序排序 Pageable pagea ...