My solution in JavaScript:
/**
* @param {number[]} nums
* @return {SparseVector}
*/
var SparseVector = function (nums ) {
const x = new Map ()
for ( let i = 0 ; i < nums .length ; i ++ ) {
if (nums [i ] != 0 ) {
x .set (i , nums [i ])
}
}
this.map = x
this.length = nums .length
return this
};
// Return the dotProduct of two sparse vectors
/**
* @param {SparseVector} vec
* @return {number}
*/
SparseVector .prototype .dotProduct = function (vec ) {
let ans = 0 ;
for ( let i = 0 ; i < vec .length ; i ++ ) {
if (vec .map .has (i ) && this.map .has (i )) {
ans += vec .map .get (i ) * this.map .get (i )
}
}
return ans
};
// Your SparseVector object will be instantiated and called as such:
// let v1 = new SparseVector(nums1);
// let v2 = new SparseVector(nums2);
// let ans = v1.dotProduct(v2);