返回一个整数数组中最大子数组的和。
2016-04-07 20:46
274 查看
设计思想: 遍历所有子数组,将每个元素依次相加,将每次加后赋给一个值b,加下一个元素后,与之前最大值比较,若小于,则最大值不变,否则更新最大值。刚加到和小于等于0时,b更新为数组下一位元素。
出现的问题: 开始时b更新的条件判断错误,导致输出错误。
源代码:
import java.util.Scanner;
public class Arraymax {
public static int maxSum(int arr[]){ //定义一个函数maxSum 求数组中子数组和的最大值
int sum = arr[0]; //sum 子数组和
int b = 0;
for(int i = 0;i<arr.length;i++)
{
if(b<=0) //子数组和小于0时,b为子数组为0时的元素的后一位
b=arr[i];
else
b+=arr[i]; //b 子数组和
if(b>sum)sum=b; //将最大子数组和赋值给sum
}
return sum;
}
public static void main(String[] args) {
System.out.println("请输入数组中元素个数;");
Scanner reader=new Scanner(System.in);
int n=reader.nextInt();
int []array=new int
;
System.out.println("请输入数组:");
for(int i=0;i<n;i++) //输入数组
{
array[i]=reader.nextInt();
}
int result = maxSum(array); //调用函数
System.out.println("最大字数组之和为:"+result);
}
}
结果截图:
总结:
编写程序前一定要先想好程序的逻辑结构。
出现的问题: 开始时b更新的条件判断错误,导致输出错误。
源代码:
import java.util.Scanner;
public class Arraymax {
public static int maxSum(int arr[]){ //定义一个函数maxSum 求数组中子数组和的最大值
int sum = arr[0]; //sum 子数组和
int b = 0;
for(int i = 0;i<arr.length;i++)
{
if(b<=0) //子数组和小于0时,b为子数组为0时的元素的后一位
b=arr[i];
else
b+=arr[i]; //b 子数组和
if(b>sum)sum=b; //将最大子数组和赋值给sum
}
return sum;
}
public static void main(String[] args) {
System.out.println("请输入数组中元素个数;");
Scanner reader=new Scanner(System.in);
int n=reader.nextInt();
int []array=new int
;
System.out.println("请输入数组:");
for(int i=0;i<n;i++) //输入数组
{
array[i]=reader.nextInt();
}
int result = maxSum(array); //调用函数
System.out.println("最大字数组之和为:"+result);
}
}
结果截图:
总结:
编写程序前一定要先想好程序的逻辑结构。
相关文章推荐
- Js 对 浏览器 的 URL的操作
- OpenCV 无法启动此程序,因为计算机中丢失opencv_core249.dll。请尝试重新安装改程序已解决此问题
- 剑指offer-面试题22.栈的压入,弹出序列
- 客户机程序与服务器程序
- dispatcherservlet详解
- Mybatis 一对多 查询
- Swift UITextField/UITextView(placeholder的制作)
- HDOJ 1279 验证角谷猜想
- 04-07博客
- HDOJ 1279 验证角谷猜想
- 自定义tabBar在push到下一个界面的时候实现隐藏
- C语言问卷调查表
- BZOJ2741: 【FOTILE模拟赛】L
- 12、Mysql优化常见问题
- 剑指offer-面试题21.包含min函数的栈
- 升级Xcode之后VVDocumenter-Xcode不能用的解决办法
- 数据库增删改查(二)
- 向量的点乘和插乘
- 单例在Swift中的正确实现方式
- AMQ 虚拟topic