求最大值(连续3个值的和)

风影枫林 2011-06-28 05:01:00


//现有一个数组,求连续3个值相加的和最大是多少? 哪位有比较好的算法?
int a[] = {1,4,3,6,3,2,7,8,4,9,3,5,2}
...全文
358 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
ruanhjian 2011-07-11
  • 打赏
  • 举报
回复
还不错哦
walkman_22 2011-07-11
  • 打赏
  • 举报
回复
5楼的代码如果计算和全是负数的数组~~~~
缘缘 2011-07-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 alexandertech 的回复:]

Java code

int max=0;
for (int i=0; i<a.length-2; i++) {
if (i==0 || (a[i] + a[i+1] + a[i+2]) > max)
max = a[i] + a[i+1] + a[i+2];
}
[/Quote]
我发现这位朋友的代码一直是这么的简练!!!
walkman_22 2011-07-11
  • 打赏
  • 举报
回复
应该只用一次循环。我的代码如下:

package com.walkman.suanfa;
/**
* 作者: 严振
* 日期: 2011-7-11
* 内容: 求连续三个值相加的最大值
* 设计思想:用选择法,先取前三个数的和为最大值,循环进行比较。时间复杂度O(n)。
*/
public class MaxSum {

public static void main(String[] args) {
// TODO Auto-generated method stub
int a[] = {1,4,3,6,3,2,7,8,4,9,3,5,2};
int first_max = a[0] + a[1] + a[2]; //确定第一个为比较的值
int comp = 0;
for(int i = 1; i < a.length - 3; i++ ){
comp = a[i] + a[i+1] + a[i+2];
if(first_max < comp){
first_max = comp;
}
}
System.out.println("最大的和是: "+first_max);
}

}
lliiqiang 2011-07-06
  • 打赏
  • 举报
回复
从左边第一个数计算与后两个之和直到倒数第二个
healer_kx 2011-06-29
  • 打赏
  • 举报
回复
如果是连续的,那就没有什么难度,也没啥可以优化的了。
哎呦喂哈 2011-06-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 huang005x 的回复:]
我需要的是 连续 三个值的和,排序干嘛?
[/Quote]
按从大到小排序,然后求前三个的和
lijian8552 2011-06-29
  • 打赏
  • 举报
回复
题目实现起来很简单,主要看性能的问题!
若鱼1919 2011-06-29
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zyc13701469860 的回复:]
直接上code了

Java code

public class Test {
static int a[] = {1,4,3,6,3,2,7,8,4,9,3,5,2};
static int N = 3;//连续N项和
public static void main(String[] args) {
System.out.println(……
[/Quote]

学习了...
chenchenyangll 2011-06-29
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 fractalman 的回复:]

5楼的时间复杂度是 O(3N),肯定不是最优的
[/Quote]

为什么是3N N吧?

13L 滑动是对的
Mourinho 2011-06-29
  • 打赏
  • 举报
回复
直接上code了

public class Test {
static int a[] = {1,4,3,6,3,2,7,8,4,9,3,5,2};
static int N = 3;//连续N项和
public static void main(String[] args) {
System.out.println("连续" + N + "项和最大值为" + findMax(a, N));
}

/**count 为连续n项和*/
static int findMax(int[] num,int count){
if(num.length < count || count <= 0)
return Integer.MAX_VALUE * (-1); //数组长度过小,或者项数为非正
int sum = 0,max = Integer.MAX_VALUE * (-1);
for(int i = 0;i < count - 1;i++)
sum += num[i];
for(int i = count - 1;i < num.length;i++){
sum += num[i];
if(sum > max)
max = sum;
sum -= num[i - count + 1];
}
return max;
}
}



结果:
连续3项和最大值为21
Alex_shpd 2011-06-28
  • 打赏
  • 举报
回复
5楼的时间复杂度是 O(3N),肯定不是最优的
yaoweijq 2011-06-28
  • 打赏
  • 举报
回复
类似于窗口滑动的算法么
love_wizard 2011-06-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 alexandertech 的回复:]

Java code

int max=0;
for (int i=0; i<a.length-2; i++) {
if (i==0 || (a[i] + a[i+1] + a[i+2]) > max)
max = a[i] + a[i+1] + a[i+2];
}
[/Quote]

同意
三心不可得 2011-06-28
  • 打赏
  • 举报
回复
-2 ,不是 -3
若鱼1919 2011-06-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 goldenfish1919 的回复:]
Java code


public static void main(String[] args) {
int a[] = {1,4,3,6,3,2,7,8,4,9,3,5,2};
int maxSum = 0;
int maxIndex = 0;
for(int i=0;i<a.length-3;i++){
……
[/Quote]

sorry,应该是a.length-2,而不是a.length-3

向5楼那样才对
飞跃颠峰 2011-06-28
  • 打赏
  • 举报
回复
4楼代码有两个小Bug
i<a.length-3
数组中如果全是负数,结果会不对
mynameiscloud 2011-06-28
  • 打赏
  • 举报
回复
[Quote=引用楼主 huang005x 的回复:]
Java code


//现有一个数组,求连续3个值相加的和最大是多少? 哪位有比较好的算法?
int a[] = {1,4,3,6,3,2,7,8,4,9,3,5,2}
[/Quote]

楼主当前的算法是什么样的呢
飞跃颠峰 2011-06-28
  • 打赏
  • 举报
回复

int max=0;
for (int i=0; i<a.length-2; i++) {
if (i==0 || (a[i] + a[i+1] + a[i+2]) > max)
max = a[i] + a[i+1] + a[i+2];
}
若鱼1919 2011-06-28
  • 打赏
  • 举报
回复

public static void main(String[] args) {
int a[] = {1,4,3,6,3,2,7,8,4,9,3,5,2};
int maxSum = 0;
int maxIndex = 0;
for(int i=0;i<a.length-3;i++){
int temp = a[i]+a[i+1]+a[i+2];
if(maxSum < temp){
maxSum = temp;
maxIndex = i;
}
}
System.out.println(maxSum);
System.out.println(maxIndex);
}
加载更多回复(3)

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧