package main
import (
"bufio"
"fmt"
"os"
"sort"
"time"
)
func main() {
var n int
fmt.Scan(&n)
timeStrList := make([]string, n)
scanner := bufio.NewScanner(os.Stdin)
layout1 := "2006-01-02 15:04:05"
layout2 := "2006-01-02 15:04:05.000"
timeGroupMap := make(map[int][]int)
for i := 0; i < n; i++ {
if scanner.Scan() {
timeStrList[i] = scanner.Text()
tempTimeGroup, _ := time.Parse(layout1, timeStrList[i])
if timeGroupMap[int(tempTimeGroup.Unix())] == nil {
timeGroupMap[int(tempTimeGroup.Unix())] = make([]int, 0)
}
}
}
for _, timeStr := range timeStrList {
tempTimeGroup, _ := time.Parse(layout1, timeStr)
tempTimeItem, _ := time.Parse(layout2, timeStr)
timeGroupMap[int(tempTimeGroup.Unix())] = append(timeGroupMap[int(tempTimeGroup.Unix())], int(tempTimeItem.UnixNano()))
}
count := len(timeGroupMap)
for _, timestamps := range timeGroupMap {
if len(timestamps) == 1 {
continue
}
sort.Ints(timestamps)
fristTimestamp := timestamps[0]
for _, timestamp := range timestamps[1:] {
if fristTimestamp == timestamp {
count++
}
}
}
fmt.Println(count)
}
总结:首先按照秒进行分组,每秒内至少有一个免单,在判断每个分组内和最早的时间相同的数量,注意耽误时间戳单位的纳秒