【牛客刷题】HJ8 合并表记录

这题最开始的想法就是用一个map来解决问题:
func main() {
num := 0
fmt.Scan(&num)
a := 0
b := 0
m := make(map[int]int)
for i := 0; i < num; i++ {
fmt.Scan(&a)
fmt.Scan(&b)
m[a] += b
}
for k, v := range m {
fmt.Printf("%d %d\n", k, v)
}
}
然而很可惜,Go的Map没有排序功能,不像Java可以直接用TreeMap来解决问题。因此上面的方法是错的。后来我想了想,其实可以利用数组,令下标为key,那么就能实现有序了。因此,我写出了第二版程序:
package main
import "fmt"
func main() {
num := 0
fmt.Scan(&num)
a := 0
b := 0
arr := make([]int, 11111112)
for i := 0; i < num; i++ {
fmt.Scan(&a)
fmt.Scan(&b)
arr[a] += b
}
for i, v := range arr {
if v != 0 {
fmt.Printf("%d %d\n", i, v)
}
}
}
这样的判定就正确了,但是问题又来了,时间上太久了:

Java版本的才100ms,Go竟然要60ms,这实际上是因为数组太大了导致的。为了解决这个问题,还需要引入一个Map:
- 将所有的输入保存到Map中
- 将key保存到一个数组中
- 数组排序
- 遍历数组,用数组中的元素访问之前的Map
新的代码是这样的:
package main
import (
"fmt"
"sort"
)
func main() {
num := 0
fmt.Scan(&num)
a := 0
b := 0
m := make(map[int]int)
for i := 0; i < num; i++ {
fmt.Scan(&a)
fmt.Scan(&b)
m[a] += b
}
var arr []int
for k := range m {
arr = append(arr, k)
}
sort.Ints(arr)
for _, v := range arr {
fmt.Printf("%d %d\n", v, m[v])
}
}
【牛客刷题】HJ8 合并表记录的更多相关文章
- 句子反转——牛客刷题(java)
题目描述: 给定一个句子(只包含字母和空格), 将句子中的单词位置反转,单词用空格分割, 单词之间只有一个空格,前后没有空格. 比如: (1) “hello xiao mi”-> “mi xia ...
- 输出单项链表中倒数第k个结点——牛客刷题
题目描述: 输入一个单向链表,输出该链表中倒数第k个结点 输入.输出描述: 输入说明:1.链表结点个数 2.链表结点的值3.输入k的值 输出说明:第k个结点指针 题目分析: 假设链表长度为n,倒数第k ...
- php实现 合并表记录(需求是最好的老师)
php实现 合并表记录(需求是最好的老师) 一.总结 一句话总结:php数组,桶. 1.fgets的作用? 读取一行 0 1 2.如何读取一行中的两个数? fgets()读取一行后explode以空格 ...
- 【牛客 错题集】Linux系统方面错题合集
前言:牛客Linux322道全部刷完,有些题目较老,甚至考核5系统,现在7都出来了几年了 = = 还有些题目解析的很好部分也摘录了进来.很多涉及嵌入式开发的选择题同样的摘录的作为了解使用 ------ ...
- 牛客小白月赛15 C 表单 ( map 使用)
链接:https://ac.nowcoder.com/acm/contest/917/C来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言52428 ...
- C#LeetCode刷题-哈希表
哈希表篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 42.8% 简单 3 无重复字符的最长子串 24.2% 中等 18 四数之和 ...
- C#LeetCode刷题之#168-Excel表列名称(Excel Sheet Column Title)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3850 访问. 给定一个正整数,返回它在 Excel 表中相对应的 ...
- LeetCode刷题之合并排序链表
合并两个有序链表并返回一个新的列表.新列表应该由连接在一起的节点前两个列表 给定实例:Input: 1->2->4, 1->3->4Output: 1->1->2- ...
- 10.1牛客J题
https://www.nowcoder.com/acm/contest/201/J Description: 给你一行括号,定义了括号合格的形式,然后Q次询问,问你这个区间内括号是否合格 Solut ...
- LeetCode刷题--21.合并两个有序链表(简单)
题目描述 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1 -> 2 -> 4 ,1 -> 3 -> 4 输出:1 ...
随机推荐
- 记一次 Edge 及谷歌 Chrome 浏览器兼容性冲突的解决
目录 记一次 Edge 及谷歌 Chrome 浏览器兼容性冲突的解决 浏览器兼容性冲突症状 解决方法 1. 把本机和远程的 8235 和 8237 端口屏蔽,包括 TCP 和 UDP 端口 2. 在 ...
- RedHat 6.9 操作系统安装
重启服务器--按F11--bios boot manager ---选择自己的U盘 通过U盘启动RedHat6.9系统,如图安装界面: 选择Install or upgrade an exising ...
- 基于附带Attention机制的seq2seq模型架构实现英译法的案例
模型架构 先上图 我们这里选用GRU来实现该任务,因此上图的十个方框框都是GRU块,如第二张图,放第一张图主要是强调编码器的输出是作用在解码器每一次输入的观点,具体的详细流程图将在代码实现部分给出. ...
- NXP i.MX 8M Mini开发板规格书(四核ARM Cortex-A53 + 单核ARM Cortex-M4,主频1.6GHz)
1 评估板简介 创龙科技TLIMX8-EVM是一款基于NXP i.MX 8M Mini的四核ARM Cortex-A53 + 单核ARM Cortex-M4异构多核处理器设计的高性能评估板,由核心板和 ...
- Spring手动获取bean的四种方式
一.实现BeanFactoryPostProcessor接口 @Component public class SpringUtil implements BeanFactoryPostProcesso ...
- @Autowired和@Resource有哪些区别
一.注解的作用 @Autowired和@Resource都是用来实现Bean的自动注入功能. 二.@Autowired和@Resource的区别 1.所属的包不同 @Autowired是Spring的 ...
- Vscode 一次选中多行 光标一次定位多行
1 . 鼠标点击开始位置(定位到行首时,鼠标就点击第一行的行首:定位到行尾时,鼠标就点击第一行的行尾:) 2. 按住shift+alt 点击结束的位置(定位到行首时,鼠标就点击最后一行的行首:定位到 ...
- redis雪崩
每个key(即数据)如果设置了失效时间的话,如果大量key同时过期的时候,或者说因为某种原因redis中的数据突然大批量丢失,这些key又大量地去请求这些key时,因为redis里面没有这些数据,就会 ...
- [oeasy]python0032_杀死进程_进程后台运行不输出_nohup_ps_显示进程
查看进程 回忆上次内容 上次先ctrl + z 挂起进程 然后运行 bg 编辑 程序继续跑起来 而且不断输出到标准输出流 甚至连ctrl + c 都无法结束进程了 这可怎么办呢? 只能新开一个 ...
- 第九节 JMeter基础-高级登录【接口关联-鉴权】
声明:本文所记录的仅本次操作学习到的知识点,其中商城IP错误,请自行更改. 背景:电商的功能:登录.加入购物车.提交订单.问题:谁把什么商品加入了购物车?这时需要把上一个接口的响应数据(登录成功后返回 ...