FB面经 稀疏矢量乘积

有序情况如下,使用双指针即可

class Node{
int index;
int value;
public Node(int index, int value);
}
//O(M+N)
public sparseVectorDotProduct(int v1[], int v2[]){
    List<Node> l1 = new ArrayList<Node>();
    List<Node> l2 = new ArrayList<Node>();
    for(int i = 0; i< v1.length; i++){
        if(v1[i]!=0)l1.add(new Node( i, v1[i]));
    }
    for(int j = 0; j<v2.length; j++){
        if(v2[j]!=0) l2.add(new Node( j, v2[j]));
    }
    int i = 0; j = 0, res = 0;
    while( i < l1.size() && j < l2.size() ){
        if(l1.get(i).index == l2.get(j).index){
            res += l1.get(i++).value * l2.get(j++).value;
        }
        else if( l1.get(i).index < l2.get(j).index) i++;
        else j++;
    }
    return res;
}

一个很长一个很短的话,遍历短矢量,对长矢量二分搜索

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一些概念 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这...
    Winterfell_Z阅读 11,317评论 0 13
  • Java8张图 11、字符串不变性 12、equals()方法、hashCode()方法的区别 13、...
    Miley_MOJIE阅读 9,120评论 0 11
  • 算法思想贪心思想双指针排序快速选择堆排序桶排序荷兰国旗问题二分查找搜索BFSDFSBacktracking分治动态...
    第六象限阅读 8,777评论 0 0
  • 问题一:双髋不在同一平面一前一后,双坐骨没有均匀受力,膝盖悬空。 原因:髋关节不够灵活,中正意识不强,臀腿后侧肌肉...
    RayYang_阅读 2,271评论 0 0
  • 有时候想要穿出拉风的运动范,却被人误以为是要去健身房,于是你给运动style下了个不适合出街的定义,再也不敢穿运动...
    茉客阅读 3,030评论 1 1