/********************** LeetCode 539 Minimum Time Difference 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. **************************/ /********************** 思想: 1.时间格式为 23:59 所以只有24*60种可能性 2.求最小相差时间,即是求任意两个时间点之间的距离 3.建立一个hash表,hash[i] = true表示i时间点存在列表中,否则不存在列表中 i = hour*60+minute 4.遍历times数组,填充hash表 5.遍历hash表,求两个元素之间最小距离 6.边界处理 end%(24*60) 时间复杂度: O(n) 空间复杂度 O(n) *****************************/ //将相应的时间转换为 该时刻在hash表中的下标 int stringToIndex(string time) { int hour = atoi(time.substr(0, 2).c_str()); int minute =atoi( time.substr(3, 2).c_str()); return hour * 60 + minute; } int findMinDifference(vector<string> &timePoints) { //建立一个hash表,表示时间是否出现在列表中 bool timeFlag[24 * 60 + 1]; memset(timeFlag, 0, sizeof(timeFlag)); int len = timePoints.size(); for (int ii = 0; ii < len; ++ii) { int index = stringToIndex(timePoints[ii]); if (!timeFlag[index]) timeFlag[index] = true; else return 0; } int start=0; int end=0; while (!timeFlag[start]) { ++start; } int minDiff = 65535; while (start<24*60) { end = start + 1; while (!timeFlag[end % (24 * 60)]) { ++end; } minDiff = ((end - start) % (24 * 60)>minDiff ? minDiff : (end - start) % (24 * 60)); start = end; } return minDiff; }
【LeetCode 539】 Minimum Time Difference
最新推荐文章于 2018-07-31 10:05:00 发布