OJ上的java代码为什么总是内存超限啊?有代码(最大连续子列和问题)

LOOKOOUT 2015-03-10 12:02:40
这道题:http://www.patest.cn/contests/mooc-ds2015spring/01-1


import java.util.Scanner;

public class Main {
static private int start=0;
static private int end=-1;

public static int maxsubsum(int[] seq)
{
int maxsum=0;
int thissum=0;
for(int i=0,j=0;j<seq.length;j++)
{
thissum+=seq[j];
if (thissum>maxsum)
{
maxsum=thissum;
start=i;
end=j;
}
else if (thissum<0)
{
i=j+1;
thissum=0;
}
}
return maxsum;
}

public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int k=in.nextInt();
int[] seq=new int[k];
for (int i=0;i<k;i++)
{
seq[i]=in.nextInt();
}
int ans=maxsubsum(seq);
System.out.println(ans);
}

}


有没有优化的方法啊
...全文
816 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
飏飏一蝶 2015-03-10
  • 打赏
  • 举报
回复
public static int maxsubsum(int[] seq) { int maxsum=-9999; int thissum=0; //遍历所有子序列(包括包含单个数的子序列) for(int i=0;i<seq.length;i++) for(int j=i;j<seq.length;j++) { //计算每个子序列的和值,记录这些和值里的最大值以及开始结束位置 for(int k=i;k<=j;k++) { thissum += seq[k]; if(thissum >= maxsum) { maxsum = thissum; start = i; end = j; } //重置thissum thissum =0; } } return maxsum; } 上网本没法测试,尝试着写,呵呵
飏飏一蝶 2015-03-10
  • 打赏
  • 举报
回复
少写了个返回值
飏飏一蝶 2015-03-10
  • 打赏
  • 举报
回复
public static int maxsubsum(int[] seq) { int maxsum=-9999; int thissum=0; //遍历所有子序列(包括包含单个数的子序列) for(int i=0;i<seq.length;i++) for(int j=i;j<seq.length;j++) { //计算每个子序列的和值,记录这些和值里的最大值以及开始结束位置 for(int k=i;k<=j;k++) thissum += seq[k]; if(thissum >= maxsum) { maxsum = thissum; start = i; end = j; } } } 你的子序列没遍历完,而且以0为界是什么意思呢 这个还涉及到多个相同最大值和值子序列的情况没考虑 如果要考虑的话需要将start,end设计为数组或则Map 个人意见,仅供参考
霜之哀伤 2015-03-10
  • 打赏
  • 举报
回复
题目不是说内存限制 65536kb么,看起来没超啊
LOOKOOUT 2015-03-10
  • 打赏
  • 举报
回复
引用 5 楼 dollyn 的回复:
不要用数组保存, 一边读一边算

还是不管用
这是java代码
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int k=in.nextInt();
int maxsum=0;
int thissum=0;
int current=0;
for(int i=0;i<k;i++)
{
current=in.nextInt();
thissum+=current;
if (thissum>maxsum)
maxsum=thissum;
else if (thissum<0)
thissum=0;
}
System.out.println(maxsum);
}
}

这是C代码
#include<stdio.h>
int main()
{
int k,current;
int maxsum=0,thissum=0;
scanf("%d",&k);
for(int i=0;i<k;i++)
{
scanf("%d",¤t);
thissum+=current;
if(thissum>maxsum)
maxsum=thissum;
else if (thissum<0)
thissum=0;
}
printf("%d\n",maxsum );
}


结果

题目是01-1是我的 为什么差别这么大 java还是内存超了。。。
霜之哀伤 2015-03-10
  • 打赏
  • 举报
回复 1
不要用数组保存, 一边读一边算
LOOKOOUT 2015-03-10
  • 打赏
  • 举报
回复
呃 不是没写完 这是一种特殊的算法。。

62,612

社区成员

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

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