其他分享
首页 > 其他分享> > 1570. Dot Product of Two Sparse Vectors

1570. Dot Product of Two Sparse Vectors

作者:互联网

For sparse venctors, there might be too many "0"s in the array. What we need to do is only abstract the items which are not "0". We store these non-zero items in HashMap or HashSet.

The HashMap solution is as following:

class SparseVector {
    Map<Integer, Integer> map = new HashMap<>();
    SparseVector(int[] nums) {
        for(int i=0;i<nums.length;i++){
            if(nums[i]!=0){
                map.put(i, nums[i]);
            }
        }
    }
    
    // Return the dotProduct of two sparse vectors
    public int dotProduct(SparseVector vec) {
        Map<Integer, Integer> map1 = this.map;
        Map<Integer, Integer> map2 = vec.map;
        if(map1.size()>map2.size()){   //this is for follow up question
            return vec.dotProduct(this);
        }
        int sum = 0;
        for(Integer key: map1.keySet()){
            if(map2.containsKey(key)){
                sum+=map1.get(key)*map2.get(key);
            }
        }
        return sum;
    }
}

For follow up question: What if only one of the vectors is sparse? 

The answer is, we compare the two HashMaps, we iterate the HashMap which has a smaller size.

We can also use HashSet to store the index of the nums, and get value from nums.

class SparseVector {
    Set<Integer> set = new HashSet<>();
    int[] nums;
    SparseVector(int[] nums) {
        this.nums = nums;
        for(int i=0;i<nums.length;i++){
            if(nums[i]!=0){
                set.add(i);
            }
        }
    }
    
    // Return the dotProduct of two sparse vectors
    public int dotProduct(SparseVector vec) {
        Set<Integer> set1 = this.set;
        Set<Integer> set2 = vec.set;
        if(set1.size()>set2.size()){   //this is for follow up question
            return vec.dotProduct(this);
        }
        int sum = 0;
        for(Integer i: set1){
            if(set2.contains(i)){
                sum+=nums[i]*vec.nums[i];
            }
        }
        return sum;
    }
}

 

标签:Product,nums,int,sum,Vectors,Two,vec,key,size
来源: https://www.cnblogs.com/feiflytech/p/15869959.html