题解 | #合并表记录#
合并表记录
https://www.nowcoder.com/practice/de044e89123f4a7482bd2b214a685201
package main
import (
"fmt"
"sort"
)
type Record struct {
Index int
Value int
}
func main() {
var n int
fmt.Scanf("%d", &n)
records := make([]Record, n)
for i:=0; i<n; i++ {
fmt.Scanf("%d %d", &records[i].Index, &records[i].Value)
}
sort.Slice(records, func(i, j int) bool {
return records[i].Index < records[j].Index
})
mergedRecords := make([]Record, 0)
for i := 0; i< n; i++ {
if i >0 && records[i].Index == records[i-1].Index {
mergedRecords[len(mergedRecords)-1].Value += records[i].Value
} else {
mergedRecords = append(mergedRecords, records[i])
}
}
for _, record := range mergedRecords {
fmt.Printf("%d %d\n", record.Index, record.Value)
}
}
以下是使用Golang实现的代码示例:
package main
import (
"fmt"
"sort"
)
func mergeRecords(records map[int]int) map[int]int {
result := make(map[int]int)
for index, value := range records {
result[index] += value
}
return result
}
func main() {
var n int
fmt.Scan(&n)
records := make(map[int]int)
for i := 0; i < n; i++ {
var index, value int
fmt.Scan(&index, &value)
records[index] += value
}
mergedRecords := mergeRecords(records)
keys := make([]int, 0, len(mergedRecords))
for key := range mergedRecords {
keys = append(keys, key)
}
sort.Ints(keys)
for _, key := range keys {
fmt.Println(key, mergedRecords[key])
}
}
这段代码首先读取键值对的个数 n,然后使用一个 map[int]int 类型的变量 records 来存储输入的记录。接下来,通过循环读取每一行的索引和数值,并将其累加到 records 中相同索引的值上。
然后,调用 mergeRecords 函数对 records 进行合并操作,将相同索引的数值进行求和运算,得到合并后的结果 mergedRecords。
最后,使用 sort.Ints 对合并后的结果的键进行升序排序,并按照排序后的顺序输出键值对。
查看21道真题和解析
