从6个数字列表

时间:2017-10-24 16:19:17

标签: python algorithm

给定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.我可以使用什么算法来解决这个问题?

2 个答案:

答案 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>0tens<6