539. Minimum Time Difference

Medium

Given a list of 24-hour clock time points in "HH:MM" format, return the minimum minutes difference between any two time-points in the list.

Example 1:

Input: timePoints = ["23:59","00:00"]
Output: 1

Example 2:

Input: timePoints = ["00:00","23:59","00:00"]
Output: 0

Constraints:

  • 2 <= timePoints.length <= 2 * 10^4

  • timePoints[i] is in the format "HH:MM".

解題

Runtime: 3 ms, faster than 100%

Memory Usage: 4.2 MB, less than 97.22%

func findMinDifference(timePoints []string) int {
    sort.Slice(timePoints, func(i int, j int) bool { // 從00:00~23:59 排序
        if timePoints[i][0] == timePoints[j][0] && timePoints[i][1] == timePoints[j][1] {
            if timePoints[i][3] == timePoints[j][3] {
                return timePoints[i][4] < timePoints[j][4]
            }

            return timePoints[i][3] < timePoints[j][3]
        }

        if timePoints[i][0] == timePoints[j][0] {
            return timePoints[i][1] < timePoints[j][1]
        }

        return timePoints[i][0] < timePoints[j][0]
    })

    ans := 100000000000

    for i:=1; i<len(timePoints); i++ {
        ans = min(ans, timeToMinutes(timePoints[i]) - timeToMinutes(timePoints[i - 1]))
    }
    
    // 最大的時間與最小的時間之間隔
    ans = min(ans, 1440 - timeToMinutes(timePoints[len(timePoints) - 1]) + timeToMinutes(timePoints[0])) 

    return ans
}

func timeToMinutes(s string) int { // 轉換為分鐘
    month, err := strconv.Atoi(s[:2]) //month
    if err != nil {
        fmt.Println(err)
    }

    day, err1 := strconv.Atoi(s[3:]) //day
    if err1 != nil {
        fmt.Println(err)
    }

    return month * 60 + day
}

func min(a, b int) int {
    if a < b { return a }
    return b
}

Last updated