用java编了个ACM问题,可是程序怎么都通不过因为运行时间太长!

求改进啊!大神教教我,题目是HDU4883,百度也有
这是题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4883
题目+
+题目

下面是我的代码,求给建议!减少运行时间啊!跪求!

 import java.util.*;
public class Main{
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int T=sc.nextInt();int time1,time2,allTime1,allTime2;
        String t1,t2;
        int Max[]=new int [T];

        for(int i=0;i<T;i++){
            int n=sc.nextInt();
            int []Num=new int [1500];
            for(int j=0;j<n;j++){

                int num=sc.nextInt();
                 t1=sc.next();
                 t2=sc.next();
                 time1=Integer.parseInt(t1.replace(":", ""));
                 time2=Integer.parseInt(t2.replace(":", ""));
                 allTime1=All(time1);
                 allTime2=All(time2);
                Num[allTime1]+=num;
                Num[allTime2]-=num;
            }
            for(int k=1;k<1440;k++){
                Num[k]+=Num[k-1];
                if(Max[i]<Num[k])
                    Max[i]=Num[k];
            }
        }
        for(int i=0;i<T;i++){
            System.out.println(Max[i]);}
    }
    public static int All(int time){
        int Time=(time/100)*60+time%100;
        return Time;
    }
}

3个回答

看你就是循环死算,这个算法要改良才行。

import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int T=sc.nextInt();int time1,time2,allTime1,allTime2;
String t1,t2;
int Max[]=new int [T];

    for(int i=0;i<T;i++){
        int n=sc.nextInt();
        int []Num=new int [1500];
        for(int j=0;j<n;j++){

            int num=sc.nextInt();
             t1=sc.next();
             t2=sc.next();
             time1=Integer.parseInt(t1.replace(":", ""));
             time2=Integer.parseInt(t2.replace(":", ""));
             allTime1=All(time1);
             allTime2=All(time2);
            Num[allTime1]+=num;
            Num[allTime2]-=num;
        }
        for(int k=1;k<1440;k++){
            Num[k]+=Num[k-1];
            if(Max[i]<Num[k])
                Max[i]=Num[k];
        }
    }
    for(int i=0;i<T;i++){
        System.out.println(Max[i]);}
}
public static int All(int time){
    int Time=(time/100)*60+time%100;
    return Time;
}

}


上面是我的代码,求优化代码运行时间啊!给点意见0.0

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐