【LeetCode每日一题】539:最小时间差

180 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第12天,点击查看活动详情

LeetCode每日一题打卡专栏正式启动!不出意外将日更LeetCode的每日一题,敬请期待。

539:最小时间差

题意

给定一个 24 小时制(小时:分钟 "HH:MM" )的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。

示例1:

输入:timePoints = ["23:59","00:00"] 输出:1

示例2:

输入:timePoints = ["00:00","23:59","00:00"] 输出:0

提示:

  • 格式为 "HH:MM"

题解:排序

第一个注意点:

首先需要注意的是,因为是24小时制,所以最大的差为:12:00——0:00(即12*60=720min)。

我们先将所有的时间转化为分钟,若两者的时间差超过了720min(如示例1中​ 明显大于了720则表示应该往后计算,即:

于是便可将所有的时间存储到一个数组中,然后按照时间从小到大排序,再两两之间求和。

第二个注意点:

需要注意最后一个时间和第一个时间也需要求差。

具体代码如下:

C++代码:

class Solution {
public:
    int findMinDifference(vector<string>& timePoints) {
        vector<int> ve;
        int n=timePoints.size();
        for(int i=0;i<n;i++){
            string s=timePoints[i];
            int h=(s[0]-'0')*10+(s[1]-'0');
            int m=(s[3]-'0')*10+(s[4]-'0');
            ve.push_back(h*60+m);
        }
        sort(ve.begin(),ve.end());
        int ans=0x3f3f3f3f;
        int num;
        for(int i=0;i<n-1;i++){
            num=ve[i+1]-ve[i];
            if(num>720) num=24*60-num;
            ans=min(ans,num);
        }
        num=ve[n-1]-ve[0];
        if(num>720) num=24*60-num;
        ans=min(ans,num);
        return ans;
    }
};

Java代码:

class Solution {
    public int findMinDifference(List<String> timePoints) {
        List<Integer> list = new ArrayList<>();
        int n = timePoints.size();
        for (int i = 0; i < n; i++) {
            int h = Integer.parseInt(timePoints.get(i).substring(0, 2));
            int m = Integer.parseInt(timePoints.get(i).substring(3, 5));
            list.add(h * 60 + m);
        }
        int ans = 0x3f3f3f3f;
        // 可以知道最大的情况为:12:00-0:00 差最大为720
        Collections.sort(list, new cmp());
        int num;
        for (int i = 0; i < n - 1; i++) {
            num=list.get(i+1)-list.get(i);
            if(num>720) num=24*60-num;
            ans = Math.min(ans,num);
        }
        //计算最后一个和第一个的差
        num=list.get(n-1)-list.get(0);
        if(num>720) num=24*60-num;
        ans=Math.min(ans,num);
        return ans;
    }
​
    class cmp implements Comparator {
        @Override
        public int compare(Object o1, Object o2) {
            // TODO Auto-generated method stub
            if((int)o1-(int)o2>=0) return 1;
            else return -1;
        }
    }
}