给定6位数的列表,返回可以从这些数字形成的最早时间。如果不能构建合法时间,则返回-1。
Example [1, 2, 3, 4, 5, 6]
output: 12:34:56
Example [1, 2, 3, 5, 8, 9]
output: 12:38:59
Example [1, 2, 3, 7, 8, 9]
output: 17:28:39
Example [6, 7, 8, 9, 9, 9]
output: -1
我开始对列表进行排序。我不确定我们如何在第二个例子中检测到这种情况,交换8和5.我可以使用什么算法来解决这个问题?
答案 0 :(得分:1)
以相反顺序考虑时间数字,从“选择列表”的最大值开始。对于每项分配,请从pick
。
pick = [1, 2, 3, 5, 8, 9] // just one of the examples
time[6] = pick[6]
// pick = [1, 2, 3, 5, 8]
time[5] = largest element of pick that's < 6; if none, return -1
// pick = [1, 2, 3, 8]
time[4] = pick[4]
// pick = [1, 2, 3]
time[2] = largest element of pick that's < 6; if none, return -1
// pick = [1, 2]
time[1] = pick[1]
// pick = []
Finally, check the hours: if time[2] + 10* time[1] > 23, return -1
答案 1 :(得分:0)
尝试从右向左扫描。然后,如果连接的数字大于60,则继续扫描满足条件的十位数。
或者你可以创建一个变量来保存数十个和一个地方,只需使用if-else
语句来检测ones>0
和tens<6
。