如何使我的代码更节省时间

时间:2014-10-24 14:16:04

标签: java performance

我将以下代码提交给在线评委。 输入规范 Bill和Ted提供的数据具有以下格式:第一行包括派对数量p,后跟猜测数量g(1≤p≤50且1≤g≤10000)。然后按照p行,每行包含一个长度≤20的唯一参与方名称(仅包含字母a-z,A-Z和数字0-9)以及该小方在小数点后一位数的实现投票百分比。各方遵循g行后,每行都有一个猜测。猜测具有P1 + P2 + ... + Pk COMP n的形式,其中P1到Pk是参与方名称,COMP是比较运算符之一<,>,< =,> =或=并且n是包含0到100之间的整数。每个参与者名称在每次猜测中最多出现一次。

输出规范 对于每个猜测,总结各方的投票百分比,并将它们与指定的整数n进行比较。然后,打印一行说明猜测是否正确。有关详细信息,请参阅示例输出。

但无论我做什么,它总是让我超出时间限制......这是我的最终代码,

 public static void main(String[] args) throws IOException {

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String Ints =  br.readLine();
    String Guess;
    String [] Ints_array = Ints.split("[ ]+");
    int p = Integer.parseInt(Ints_array[0]);
    int g = Integer.parseInt(Ints_array[1]);
    HashMap<String, Float> Parties = new HashMap<String, Float>();

    for(int i = 0 ; i < p ; i++) {
        String temp = br.readLine();
        String [] temp_array = temp.split("[ ]+");
        Parties.put(temp_array[0],Float.parseFloat(temp_array[1]));
    }

    for(int j = 0 ; j < g ; j++) {
        Guess = br.readLine();
        float actual = 0;
          String [] temp = Guess.split("[ ]+");

        if(Guess.contains("+"))
        {

            for(int i = 0 ; i < temp.length-2 ; i++)
            {
                if(!temp[i].contains("+"))
                actual+= Parties.get(temp[i]);
            }
        }
        else
        {

            actual=Parties.get(temp[0]);
        }

        float guess = Float.parseFloat(temp[temp.length-1]);

                if( temp[temp.length-2].contains(">"))
               {
                   if(temp[temp.length-2].contains("="))
                   {
                       if(actual >= guess)
                         System.out.println("Guess #"+(j+1)+" was correct."); 
                    else
                        System.out.println("Guess #"+(j+1)+" was incorrect.");  
                   }
                   else
                   {
                    if(actual > guess)
                       System.out.println("Guess #"+(j+1)+" was correct."); 
                    else
                        System.out.println("Guess #"+(j+1)+" was incorrect."); 
                     }
               } 

                  else if( temp[temp.length-2].equals("<"))
               {
                   if(temp[temp.length-2].contains("="))
                   {
                       if(actual <= guess)
                         System.out.println("Guess #"+(j+1)+" was correct."); 
                    else
                        System.out.println("Guess #"+(j+1)+" was incorrect.");  
                   }
                   else
                   {
                    if(actual < guess)
                       System.out.println("Guess #"+(j+1)+" was correct."); 
                    else
                        System.out.println("Guess #"+(j+1)+" was incorrect."); 
                     }  
               } 

                    else if( temp[temp.length-2].equals("="))
               {
                    if(actual == guess)
                        System.out.println("Guess #"+(j+1)+" was correct."); 
                    else
                        System.out.println("Guess #"+(j+1)+" was incorrect.");  
               } 
    }

}

}

1 个答案:

答案 0 :(得分:0)

我会写下答案的一部分,因为我认为要有一个好的搜索才能得到完整的答案。

希望这会有所帮助。