HJ8合并表记录(解法以及其中值得思考的细节)

HJ8合并表记录(解法以及其中值得思考的细节)

题目描述:
数据表记录包含表索引和数值(int范围的正整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。

例如:
	输入:
	4
	0 1
	0 2
	1 2
	3 4

	输出:
	0 3
	1 2
	3 4

首先想到的是用java中的map类保存键对值,但是这个类的一般类是没有排序的作用,且对于内存占用较多。不过后来据查找资料了解到java中Map的子类TreeMap是会自动按照升序排列,如果用上可以少写排序方法。
为了节省内存,我使用两个整型数组:key[],value[]来分别保存键队值,他们的对应关系取决于他们的公共索引,其实也就是在查找时,先找到key表中对应的key的索引 i ,然后直接读取value[i]就可以获取到对应key的值。
需要注意的是,前面两个数组的大小需要提前确定且应该为第一次输入的N(实际使用空间小于等于N),且为了后续遍历输出不溢出(数组空间没用完),应当额外定义一个整型数size来记录用到的空间的最大索引数。

详细操作不再赘述(直接插入排序),其中我觉得比较有意思的细节是:
1: 对于插入排序的元素后移,以前比较脑瘫,总是通过从前往后移动,先定义一个变量tmp保存当前位置的值,然后把当前位置值改写成前一次循环时的tmp(tmp初始化为需要插入元素的值)。其实完全可以从后往前逐个移动,当移动到需要插入的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值