题目要求:
算法分析:
首先要明白本题目的要求,可以先从给出的输入输出示例中看,也就是输入两个稀疏向量(线性代数中讲过的),每一个向量的维数自己来定,也就是第一行第一个数字的输入,第二个数字是第一个稀疏向量“不稀疏”的位置和值,第三个数字是第二个稀疏向量“不稀疏”的位置和值。
其次进行分析,如果采用数组,由于是稀疏向量所以会造成大量的空间浪费,所以我们采用c++中的一个容器:unordered_map
。这个容器最大的优势是里面的键值对是无序的,容器底层采用的是哈希表存储结构,这一点不同于普通数组的按顺序存储,也就是说只要给出键和值即可,这也是采用这个容器的目的:节省空间。
算法实现较为简单,用两个循环,第一个循环将第一个(不稀疏值较少的那个)键和值分别存入,第二个循环做的工作就是累加。重点是这里的理解:由于两个向量采用的是一个容器,而我们的需求是两个向量对应非稀疏值的乘积和,所以直接用下标乘以新的值再累加就可以了。
源代码: