算法算法提高之LeetCode刷题数据结构和算法分析

LeetCode.949-给定数字的最大时间(Largest T

2019-06-25  本文已影响4人  程序员小川

这是悦乐书的第363次更新,第391篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第225题(顺位题号是949)。给定4个整数组成的数组,返回最大的24小时时间。

最小的24小时时间是00:00,最大的是23:59。 从00:00开始,如果从午夜开始经过更多时间,则时间会更长。

将答案作为长度为5的字符串返回。如果无法生成有效时间,则返回空字符串。例如:

输入:[1,2,3,4]
输出:“23:41”

输入:[5,5,5,5]
输出:“”

注意

02 第一种解法

根据排列组合,使用三层循环,将每一种情况都算出来,组成一个24小时时间的字符串,然后判断是否符合24小时时间制,并且判断是否比已经算出的最大时间还大,最后返回最大的时间即可。

使用三层循环的时候,可以得到三个数,剩下的那个数在数组A中索引为6-i-j-k,因为四个数的索引只能是0,1,2,3四个,已经知道其中三个,剩下那个用和做减法即可得到。另外,比较时间字符串的大小用的是compareTo方法。

public String largestTimeFromDigits(int[] A) {
    String result = "";
    for (int i=0; i<4; i++) {
        for (int j=0; j<4; j++) {
            for (int k=0; k<4; k++) {
                if (i == j || j == k || i == k) {
                    continue;
                }
                String hour = A[i] + "" + A[j];
                String minute = A[k] + "" +A[6-i-j-k];
                String time = hour + ":" + minute;
                if (hour.compareTo("24") < 0 && minute.compareTo("60") < 0
                        && time.compareTo(result) > 0) {
                    result = time;
                }
            }
        }
    }
    return result;
}

03 第二种解法

思路和上面一样,依旧是将所有可能的情况列出来,然后将有效的时间换成分钟数来表示,找出最大值,最后再转成字符串输出即可。

public String largestTimeFromDigits2(int[] A) {
    int ans = -1;
    for (int i = 0; i < 4; ++i) {
        for (int j = 0; j < 4; ++j) {
            for (int k = 0; k < 4; ++k) {
                if (i == j || j == k || i == k) {
                    continue;
                }
                int hours = 10 * A[i] + A[j];
                int mins = 10 * A[k] + A[6 - i - j - k];
                if (hours < 24 && mins < 60) {
                    ans = Math.max(ans, hours * 60 + mins);
                }
            }
        }
    }
    return ans == -1 ? "" : String.format("%02d:%02d", ans/60, ans%60);
}

04 小结

算法专题目前已连续日更超过七个月,算法题文章231+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

上一篇下一篇

猜你喜欢

热点阅读