LeetCode:539. Minimum Time Difference
2017-09-15 21:01
417 查看
Given a list of 24-hour clock time points in “Hour:Minutes” format, find the minimum minutes difference between any two time points in the list.
Example 1:
Input: ["23:59","00:00"]
Output: 1
Note:
The number of time points in the given list is at least 2 and won’t exceed 20000.
The input time is legal and ranges from 00:00 to 23:59.
题意:求给定时间数组中两两之间最短的时间差。
分析:
两两时间差最短必然出现在大小相邻的两个数之间,所以首先进行时间排序。注意:由于时钟是圆形的,大小相邻还包括最大时间点和最小时间点之间的差,即循环时间差。
代码如下:
另外:忘记是哪家公司出过一个笔试题,求得是最大时间差。
分析:最大时间差必然是最靠近该时间旋转180度的那个时间,那么可以首先进行时间排序,然后遍历时间,二分查找旋转180度的时间点附近的那两个时间(如果没有把握确定是哪两个,可以把l-1,l,r,r+1都计算),然后计算时间差。
伪代码:
Example 1:
Input: ["23:59","00:00"]
Output: 1
Note:
The number of time points in the given list is at least 2 and won’t exceed 20000.
The input time is legal and ranges from 00:00 to 23:59.
题意:求给定时间数组中两两之间最短的时间差。
分析:
两两时间差最短必然出现在大小相邻的两个数之间,所以首先进行时间排序。注意:由于时钟是圆形的,大小相邻还包括最大时间点和最小时间点之间的差,即循环时间差。
代码如下:
class Solution { final int hour=24*60; public int findMinDifference(List<String> timePoints) { Collections.sort(timePoints,new Comparator(){ @Override public int compare(Object o1,Object o2){ String s1=(String)o1; String s2=(String)o2; if(s1.split(":")[0].equals(s2.split(":")[0])) return (s1.split(":")[1].compareTo(s2.split(":")[1])); else return(s1.split(":")[0].compareTo(s2.split(":")[0])); } }); int min=timediff(timePoints.get(0),timePoints.get(timePoints.size()-1)); for(int i=1;i<timePoints.size();i++) { int temp=timediff(timePoints.get(i-1),timePoints.get(i)); if(min>temp) min=temp; } return min; } public int timediff(String ss1,String ss2){ int h1=Integer.parseInt(ss1.split(":")[0]); int m1=Integer.parseInt(ss1.split(":")[1]); int h2=Integer.parseInt(ss2.split(":")[0]); int m2=Integer.parseInt(ss2.split(":")[1]); int hdif=h2-h1; int mdif=m2-m1; int temp=hdif*60+mdif; return temp>hour/2?hour-temp:temp; } }
另外:忘记是哪家公司出过一个笔试题,求得是最大时间差。
分析:最大时间差必然是最靠近该时间旋转180度的那个时间,那么可以首先进行时间排序,然后遍历时间,二分查找旋转180度的时间点附近的那两个时间(如果没有把握确定是哪两个,可以把l-1,l,r,r+1都计算),然后计算时间差。
伪代码:
final day=24*60; sort(time); int max=0; for(int i=0;i<n;i++){ [l,r]=binFind((time[i]+day/2)%day); max=max(timeDiff(time[i],time[l-1]),max); max=max(timeDiff(time[i],time[l]),max); max=max(timeDiff(time[i],time[r]),max); max=max(timeDiff(time[i],time[r+1]),max); } return max;
相关文章推荐
- LeetCode Weekly Contest 23 之 539. Minimum Time Difference
- LeetCode笔记:539. Minimum Time Difference
- 【LeetCode 539】 Minimum Time Difference
- [leetcode]-539 Minimum Time Difference
- [leetcode] 539. Minimum Time Difference
- 539.Minimum Time Difference
- String-539-Minimum Time Difference
- [LeetCode]Minimum Time Difference(java)
- [LeetCode] Minimum Time Difference 最短时间差
- 539. Minimum Time Difference
- LeetCode Minimum Time Difference
- 539. Minimum Time Difference
- 539. Minimum Time Difference
- 539. Minimum Time Difference
- 539. Minimum Time Difference
- Minimum Time Difference问题及解法
- leetcode[Minimum Absolute Difference in BST]//待整理多种解法
- leetcode Minimum Absolute Difference in BST 二叉搜索树中的最小差
- Minimum Time Difference不复杂
- LeetCode 530 Minimum Absolute Difference in BST(BST中序遍历)