Zasadniczo można zamiast wszystkich permutacji stworzyć warunki dla każdej wartości w tablicy. Na przykład, jeśli mamy 2, wiemy, że godzina powinna wynosić 2 dla naszej dziesiątki, ale nasze jedyne miejsce na godzinę może wynosić tylko 3 w tym punkcie. Jeśli mamy 1, to znamy nasze jedno miejsce, bo godzina może wynosić 9. Wiemy, że nasza minuta to 10, a nasza maksymalna minuta to 9. Czas utworzenia pokazuje te warunki. FindMaxSpecific zwraca -1, jeśli nie jest w stanie znaleźć poprawnej liczby w podanej macierzy. W ten sposób wiemy, że czas jest nieważny, jeśli kiedykolwiek otrzymamy tablicę zwróconą przez createTime z -1. Zobacz przykładowy wynik.
public static int[] createTime(int[] numbers)
{
int[] time = new int[4];
time[0] = findMaxSpecific(numbers, 2);
time[1] = time[0] == 2 ? findMaxSpecific(numbers, 3) : findMaxSpecific(numbers, 9);
time[2] = findMaxSpecific(numbers, 5);
time[3] = findMaxSpecific(numbers, 9);
return time;
}
public static int findMaxSpecific(int[] arr, int valToFind)
{
if(arr.length != 4)
return -1;
int numToFind = -1;
int indexToRemove = -1;
for(int i = 0; i < arr.length; i++)
{
if(arr[i] <= valToFind)
{
if(arr[i] > numToFind)
{
numToFind = arr[i];
indexToRemove = i;
}
}
}
if(indexToRemove == -1)
return -1;
arr[indexToRemove] = -1;
return numToFind;
}
Na końcu tego wszystkiego jest, jeśli jakakolwiek wartość wraca jako -1 wiemy, że mamy nieprawidłowy czas dostaliśmy
Przykład
int[] time = new int[4];
int[] numbers = {1,2,3,4};
time = createTime(numbers);
System.out.println(time[0] + "" + time[1] + ":" + time[2] + "" + time[3]);
int[] numbers2 = {0,9,7,1};
time = new int[4];
time = createTime(numbers2);
System.out.println(time[0] + "" + time[1] + ":" + time[2] + "" + time[3]);
int[] numbers3 = {9,9,9,9};
time = new int[4];
time = createTime(numbers3);
System.out.println(time[0] + "" + time[1] + ":" + time[2] + "" + time[3]);
Wyjście jest
23:41
19:07
-19:-19 //invalid numbers
jak traktujesz wejście '3 3 3 3'? Jeśli mógłbyś to lepiej zdefiniować, proszę. – nullpointer
Proszę wkleić swój kod, gdzie spróbujesz go rozwiązać – MateuszW90
@nullpointer Myślę, że kwalifikuje się to jako nieprawidłowe wejście (jak już powiedział w pytaniu), ponieważ nie możesz mieć godziny 33. –