该问题表明有一些随机数字作为输入,我们必须以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,并且不能重复数字。
答案 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.
在每个段上按降序重复。
逻辑基于两个事实: