从Java中给定的数字集中找到最大日期和时间

时间:2019-06-27 16:15:22

标签: java datetime

该问题表明有一些随机数字作为输入,我们必须以MM / DD HH:MM格式找到最大日期和时间。 例如:

输入为:2,2,3,1,3,3,3,5,6,2,0

输出为:12/30 23:56

我尝试了蛮力方法,其中每个数字与其他每个数字组合形成一个2位数的数字,依此类推。但是整个程序有大约8或9个for循环。有没有更有效的方法?

编辑1: 如果无法形成月份,日期或时间,则输出必须为0。 没有自动插入0的功能,即,如果您要形成一个月09,则必须输入0,并且不能重复数字。

2 个答案:

答案 0 :(得分:1)

如果您需要最长的约会时间,我可以想到这样的事情(以伪代码):

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

答案 1 :(得分:0)

如何?

 - 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.

在每个段上按降序重复。

逻辑基于两个事实:

  1. 在高价值细分市场中,较高的细分市场最好比在所有较低的细分市场中更高(02/01 00:00优于01/31 23:59)。
  2. 搜索有效的解决方案比搜索最大的解决方案要快得多(例如,可以从约束开始)。