题解 | #合并表记录#

合并表记录

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 对合并后的结果的键进行升序排序,并按照排序后的顺序输出键值对。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务