【发布时间】:2017-07-12 23:08:50
【问题描述】:
我有一个用于我的 CS 课程的程序,当我得到大量输入时,我需要将运行时间缩短很多。
这里是代码
import java.util.Scanner;
import java.util.ArrayList;
public class Main{
public static void main (String[] args){
Scanner input = new Scanner(System.in);
int hours = 12;
int minutes = 00;
int count = 0;
int d = input.nextInt();
for(int i = 0; i < d; i++){
minutes++;
if(minutes >= 60){
hours++;
hours = hours % 12;
minutes = 0;
}
String formatNull = "";
String hourFormat = "";
if(minutes < 10){
formatNull = "0";
}
if(hours < 10)
hourFormat = "0";
String finalTimeString = hourFormat + hours + ":" + formatNull + minutes;
if(isSequence(finalTimeString)){
count += 1;
}
}
System.out.println(count);
}
public static boolean isSequence(String time){
String firstDig = time.split(":")[0];
String secondDig = time.split(":")[1];
ArrayList<Integer > foo = new ArrayList<Integer>();
if(firstDig.length() >= 2){
if(firstDig.charAt(0) != '0'){
foo.add(Integer.parseInt(String.valueOf(firstDig.charAt(0))));
} foo.add(Integer.parseInt(String.valueOf(firstDig.charAt(1))));
}
if(secondDig.length() >= 2){
foo.add(Integer.parseInt(String.valueOf(secondDig.charAt(0))));
foo.add(Integer.parseInt(String.valueOf(secondDig.charAt(1))));
}
ArrayList<Integer> bar = new ArrayList<Integer>();
int prev = foo.get(0);
for(int i = 1; i < foo.size(); i++){
bar.add(foo.get(i) - prev);
prev = foo.get(i);
}
boolean isDiff = false;
int prevDifference = bar.get(0);
for(int i = 1; i < bar.size(); i++){
if(prevDifference == bar.get(i)){
}else{
isDiff = true;
}
prevDifference = bar.get(i);
}
return !isDiff;
}
}
我不能超过 0.8 秒,现在我达到了 2.0 秒。如果有人可以提出任何建议,那就太好了。干杯。
//更新所以我想我现在正确地格式化了代码。该程序以分钟为单位接受输入,将其添加到 12 点钟并计算有多少特殊时间。一个特殊的时间例如:12:43、02:46(本质上是数字有共同点的时间);
【问题讨论】:
-
提示:您希望我们花时间帮助您完成作业。因此,至少要花时间正确格式化/缩进所有您的输入,除此之外:解释您的程序到底在做什么;以及您在哪里优化它。这不是免费的家教服务!
-
“如果有人可以提出任何建议......” 这是关于 SO 的题外话。它既太模糊了,也要求推荐一种算法/策略来修复。两者都是题外话
-
如果您的代码给出了正确的结果并且您希望对其进行改进,那么在 (Code Review)[codereview.stackexchange.com/] 网站上提供它可能会更好。但是,如果您正在寻找另一种算法,您应该重新表述您的问题。
-
@GhostCat 我很久以前学到的一件事(至少我尝试过)是:不要考虑其他人的投票方式。太多的用户不关心这个网站的目的(“高质量的问题”咳嗽),或者只是不打扰和赞成任何有一些英文单词和格式化为代码的东西。这就是我使用自定义 CSS 样式隐藏所有投票的原因。有了这个,这个网站变得更好了。
-
感谢 AntonH 会做的!
标签: java performance processing-efficiency