gpt4 book ai didi

algorithm - 从给定的四个整数显示最大军事时间

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:17:47 25 4
gpt4 key购买 nike

<分区>

我在一个面试挑战中遇到了这个问题。

问题是给定四个整数,以 24 小时格式 HH:MM 显示可能的最长时间。例如,如果您给定 A = 1、B = 9、C = 9、D = 2,则输出应为 19:29。最大时间可以是 23:59,最小时间可以是 00:00。如果无法构造 24 小时制,则返回错误。例如,给定 A = 1、B = 9、C = 7、D = 9 应返回错误,因为这些整数表示的最短时间是 17:99,这是无效的。

我最初的方法是找到给定数字的所有 24 个整数排列,然后消除所有大于 2400 的排列。之后,消除所有最后两位数大于 59 的整数。即十位是5,个位是9。过滤后,返回结果集中剩余的最大整数。

这种方法在这里是可行的,因为我们只需要计算 24 个排列,甚至更少的组合,因为重复项将被删除。但我觉得这是一种蛮力方法。有没有其他的想法不需要我们生成所有的排列?

另外作为这个问题的扩展,如果我们被要求将时间延长到秒或毫秒,分别给定总共 6 位或 8 位,那么我的方法将是昂贵的。让我们假设允许的最大运行时间复杂度可以是 O(nlogn),从而允许我们进行排序。另外,如何检查我上面提到的边缘情况?

谢谢。

编辑:下面是评论中建议的答案的代码。

//Input arraylist contains the four integers
public static String maxTime(ArrayList<Integer> list){
int first = -1;
int second = -1;
int third = -1;
int fourth = -1;

for (int a : list) {
if (a <= 2 && a > first) {
first = a;
}
}
list.remove(Integer.valueOf(first));

for (int a : list) {
if (first == 2 && a <= 3 && a > second) {
second = a;
}
}
if (second == -1) {
for (int a : list) {
if (a > second) {
second = a;
}
}
}
list.remove(Integer.valueOf(second));

for (int a : list) {
if (a <= 5 && a > third) {
third = a;
}
}
list.remove(Integer.valueOf(third));

fourth = list.get(0);

StringBuilder sb = new StringBuilder(5);
sb.append(first);
sb.append(second);
sb.append(':');
sb.append(third);
sb.append(fourth);

return sb.toString();
}

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com