精华帖 (1) :: 良好帖 (0) :: 新手帖 (2) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-05-02
最后修改:2012-05-03
{1,2}这个可以看做是下面数组的子数组,就是元素的下表相连的元素组合而成的数组。 int arr[]={1,2,0,5,-1,-2,4,8,12}; 谢谢 各位关注 ,可能是我描述不太清楚吧 就是上面这个数组arr 可以分成多个子数组 例如{1,2}就是一个子数组{2,0}也是一个子数组,当然{1}也算 只要有下标相连的数组成的,都算子数组 现在要求子数组元素的和,并且这个和是所有子数组里面最大的。 大婶们。来吧 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-05-03
....我看了题目两遍还是不明白什么意思
去 arr[] 中的元素 组成一个新的数组 。。。 找和最大 。。。。。。 做个循环 把 大于零的加一起 不就好了 |
|
返回顶楼 | |
发表时间:2012-05-03
最后修改:2012-05-03
看半天没看明白
|
|
返回顶楼 | |
发表时间:2012-05-03
看半天没太看懂,是要求出{4,8,12}?
|
|
返回顶楼 | |
发表时间:2012-05-03
arr算是自己子数组么?如果算的话就应该是他本身了吧。
|
|
返回顶楼 | |
发表时间:2012-05-03
最后修改:2012-05-03
这不就是ACM中比较常见的动态规划的问题么
|
|
返回顶楼 | |
发表时间:2012-05-03
不知道{12,1}是否算子数组,如果算的话应该是{4,8,12,1,2,0,5}
|
|
返回顶楼 | |
发表时间:2012-05-03
请大家拍砖!
package suanfa; public class MaxSubArray { public static void main(String[] args) { int arr[] = { 1, 2, 0, -5, -1, -2, 4, 8, 12 }; System.out.println(getMaxSubArray(arr)); } static int getMaxSubArray(int[] arr) { if (arr == null || arr.length == 0) { return 0; } int max = arr[0]; int start =0; int len = 0; for (int i = 0; i < arr.length; i++) { for (int subLen = 1; subLen <= arr.length-i; subLen++) { int subSum = 0; for (int k = i; k<subLen+i; k++) { subSum += arr[k]; } if (subSum > max) { max = subSum; start = i; len = subLen; } } } System.out.print("子数组:{"); for (int sub = start; sub <len+start;sub ++) { if (sub != len+start -1) { System.out.print(arr[sub] +","); }else { System.out.print(arr[sub]); } } System.out.println("}"); return max; } } |
|
返回顶楼 | |
发表时间:2012-05-03
ls2005nba 写道 ....我看了题目两遍还是不明白什么意思
去 arr[] 中的元素 组成一个新的数组 。。。 找和最大 。。。。。。 做个循环 把 大于零的加一起 不就好了 当然不是你想的这个样子 可能是我描述的有问题 举个例子,例如数组int a={10,-90,200} 那么它的子数组可以是 {10} {10,-90} {10,-90,200} {-90} {-90,200} {200} 当然 最大的子数组之和就是200了 |
|
返回顶楼 | |
发表时间:2012-05-03
结果是
{2,0,5,-1,-2,4,8,12} |
|
返回顶楼 | |