Найти максимальную дату и время из данного набора цифр в Java - PullRequest
3 голосов
/ 27 июня 2019

Проблема гласит, что в качестве входных данных приведены некоторые случайные цифры, и мы должны найти максимальную дату и время в формате ММ / ДД ЧЧ: ММ. Пример:

Ввод: 2,2,3,1,3,3,3,5,6,2,0

Вывод: 12/30 23: 56

Я попробовал метод грубой силы, где каждая цифра объединяется с каждой другой цифрой, чтобы сформировать двузначное число, и так далее. Но вся программа имела около 8 или 9 циклов. Есть ли более эффективный способ сделать это ??

Edit1: Если никакой возможный месяц или дата или время не могут быть сформированы, тогда результат должен быть 0. Нет автоматической вставки 0s, т. Е. Если вы хотите сформировать месяц 09, тогда 0 должно быть введено и повторение цифр не может быть.

Ответы [ 2 ]

1 голос
/ 27 июня 2019

Если вам нужна самая большая дата, я могу придумать что-то подобное (в преудокоде):

Turn the input digits into a MultiSet // e.g. https://www.geeksforgeeks.org/multiset-interface-guava-java/
for i = 12 to 1 // find the biggest possible month
  try to find if the digits of i are in the multi set. if they are, init the month value & remove them from the multi set.
for d = 31 to 1 // get the biggest possible day
  same
for h = 23 to 1 // get the biggest possible hour
  same
for m = 59 to 1 // get the biggest possible minute
  same
0 голосов
/ 27 июня 2019

Как насчет этого:

 - Calculate the maximum month (in order - 12, 11, 10, 09...).
  - on the remaining digits, search for a *valid* solution.
  - if no valid solution is found, decrease the month to the next highest option.
  - repeat until the maximum month with a valid solution is found.

Повторите для каждого сегмента в порядке убывания.

Логика основана на 2 фактах:

  1. Это лучшебыть выше в высоком ценовом сегменте, чем во всех нижних (02/01 00:00 лучше, чем 31/31 23:59).
  2. Поиск правильного решения намного быстрее, чем поискмаксимальный (вы можете начать с ограничений, например).
...