【LeetCode 539】 Minimum Time Difference

来源:互联网 发布:中国制造2025 知乎 编辑:程序博客网 时间:2024/05/29 07:41
/**********************LeetCode 539 Minimum Time DifferenceGiven 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.**************************//**********************思想:   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;elsereturn 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;}
0 0
原创粉丝点击