题目描述:
给定一个 24 小时制(小时:分钟 “HH:MM”)的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。
示例1:
输入:timePoints = ["23:59","00:00"]
输出:1
示例2:
输入:timePoints = ["00:00","23:59","00:00"]
输出:0
提示:
2 <= timePoints <= 2 * 104
timePoints[i] 格式为 "HH:MM"
解法一:简单模拟
思路:1.简化,以分钟为标准】【2.将一天变为两天,简化边界判定
class Solution {
public:
int f(string a){
return (a[0]*10+a[1])*60+a[3]*10+a[4];
}
int findMinDifference(vector<string>& timePoints) {
vector<int>nums;
for(auto it:timePoints){
nums.emplace_back(f(it));
nums.emplace_back(f(it)+1440); //将一天变成两天
}
sort(nums.begin(),nums.end());
int jie=INT_MAX;
for(int i=0;i<nums.size()-1;i++) {
jie=min(jie,nums[i+1]-nums[i]);
}
return jie;
}
};
解法二:对解法一稍作优化
class Solution {
public:
int f(string s){
return s[0]*600+s[1]*60+s[3]*10+s[4]; //转化为分钟
}
int findMinDifference(vector<string>& timePoints) {
if(timePoints.size()>1440)return 0;
vector<int>nums;;
for(auto it:timePoints)nums.emplace_back(f(it));
sort(nums.begin(),nums.end());//按分钟数排序
int jie=INT_MAX;
for(int i=0;i<nums.size()-1;i++){
if(jie==0)return 0; //有0的话直接返回
jie=min(jie,nums[i+1]-nums[i]);
}
jie=min(jie,1440+nums[0]-nums[nums.size()-1]); //排查边界请况
return jie;
}
};