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初始化为需要插入元素的值)。其实完全可以从后往前逐个移动,当移动到需要插入的