1. 题目
给定一个 24 小时制(小时:分钟)的时间列表,找出列表中任意两个时间的最小时间差并已分钟数表示。
示例 1:
输入: ["23:59","00:00"]
输出: 1备注:
列表中时间数在 2~20000 之间。
每个时间取值在 00:00~23:59 之间。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-time-difference
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
- 字符串转换成 分钟 时间处理
- 将分钟存进 哈希数组映射里(下标是分钟,内容是标记是否存在)
- 最后依次取出,相邻的做差,求最小
- 最后在考虑下第一个和最后一个的差
class Solution {
public:int findMinDifference(vector<string>& timePoints) {int mins[1440] = {0};int m, i;for(auto& s : timePoints){m = ((s[0]-'0')*10+s[1]-'0')*60+(s[3]-'0')*10+s[4]-'0';if(mins[m] != 0)//已经存在return 0;mins[m] = 1;}int first, prev, last, ans = 1440;for(i = 0; i < 1440 && mins[i] == 0; i++){}first = prev = i++;for( ; i < 1440; ++i){if(mins[i] == 1){last = i;ans = min(ans, last-prev);prev = last;}}return min(ans, first-last+1440);}
};