У меня есть программа для моего класса CS, и мне нужно сократить время выполнения, когда я получаю большие входы.Производительность небольшого Java-приложения
Вот код
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 (по существу время, когда цифры имеют общую разницу);
Подсказка: вы ожидаете, что мы проведем свое время, чтобы помочь вам выполнить домашнее задание. Поэтому, по крайней мере, потратьте время, необходимое для правильного форматирования/отступов ** всего ** вашего ввода, а кроме того: объясните, что именно делает ваша программа; и где вы застряли, оптимизируя его. Это здесь ** не ** бесплатная услуга репетитора! – GhostCat
«Если кто-нибудь может что-нибудь предложить ...» Это вопрос, который не соответствует теме. Он слишком расплывчатый и также требует рекомендации по исправлению алгоритма/стратегии. Оба не относятся к теме – ControlAltDel
Если ваш код дает вам правильный результат, и вы хотите его улучшить, его, вероятно, лучше обслуживают на веб-сайте (обзор кода) [https://codereview.stackexchange.com/]. Но если вы ищете другой алгоритм, вы должны повторно сформулировать свой вопрос. – AntonH