問(wèn)題:
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: 1Note:
- 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.
大意:
給出一個(gè) "Hour:Minutes" 形式的24小時(shí)制時(shí)間點(diǎn)的List,尋找List中任意兩個(gè)時(shí)間點(diǎn)的最小分鐘時(shí)間差。
例1:輸入:["23:59","00:00"]
輸出:1注意:
- 給出的List中包含的時(shí)間點(diǎn)至少有兩個(gè),不超過(guò)20000。
- 輸入的時(shí)間是合法的,而且范圍在 00:00 到 23:59。
思路:
題目會(huì)給出一系列24小時(shí)制的時(shí)間,我們要找到最小的兩個(gè)時(shí)間的時(shí)間差,這個(gè)差值是以分鐘數(shù)表示的,為了計(jì)算方便,我們寫(xiě)一個(gè)函數(shù)來(lái)將所有給出的24小時(shí)制時(shí)間全部改成分鐘表示,比如 1:30 用全分鐘數(shù)來(lái)表示就90分鐘,這樣我們計(jì)算時(shí)間差就很方便,要排序也很方便。
全部轉(zhuǎn)換成分鐘數(shù)后,我們放在一個(gè)int型數(shù)組里,對(duì)數(shù)組排序,這樣我們就可以按照拍完序后的順序去兩兩比較時(shí)間點(diǎn)之間的時(shí)間差,看哪個(gè)時(shí)間差最小,記錄下來(lái),要注意的一點(diǎn)是最后一個(gè)時(shí)間要用24小時(shí)的分鐘數(shù)減去他然后加上第一個(gè)時(shí)間點(diǎn)的時(shí)間差,得到最后一個(gè)時(shí)間點(diǎn)和第一個(gè)時(shí)間點(diǎn)的時(shí)間差。
題目說(shuō)了至少會(huì)有兩個(gè)時(shí)間點(diǎn),所以給的List為空的情況不用考慮。
代碼(Java):
public class Solution {
public int findMinDifference(List<String> timePoints) {
int[] minuteArr = new int[timePoints.size()];
for (int i = 0; i < minuteArr.length; i++) {
minuteArr[i] = transToMinute(timePoints.get(i));
}
Arrays.sort(minuteArr);
int res = 24*60 - minuteArr[minuteArr.length-1] + minuteArr[0];
for (int i = 0; i < minuteArr.length-1; i++) {
if (minuteArr[i+1] - minuteArr[i] < res) res = minuteArr[i+1] - minuteArr[i];
}
return res;
}
public int transToMinute(String time) {
String[] arr = time.split(":");
int a = Integer.valueOf(arr[0]).intValue() * 60;
int b = Integer.valueOf(arr[1]).intValue();
return a + b;
}
}
合集:https://github.com/Cloudox/LeetCode-Record