如何快速比较两个数值列表是否相等?

项目中遇到一个问题, 大概抽象成下面这个问题:
int[] a = {1, 2, 3};
int[] b = {2, 1, 3};
怎么快速比较a和b里面的值是否相同? 有没有什么公式能直接算出来两个数组的某种哈希值, 然后再比较?

阅读 5.8k
2 个回答

先比较a, b的个数是否相同;若个数不同,则不相同
若个数相同,则把a, b两个数组排序,循环数组a,每一项与b对比,若不相同,则直接返回false;不挨个儿对比的话,就先把a,b排序,然后拼接成两个字符串a_str, b_str,再对字符串比较

if( a.length!=b.length ){
    return false;
}else{
    sort(a);
    sort(b);
    for(i=0, len=a.length; i<len; i++){
        if( a[i]!=b[i] ) return false;
    }
    return true;
}

先判断个数是否相同;
建个set,遍历a,全丢进set,遍历b,挨个判断b元素是否在set中存在,如果有不存在的则说明不相同,整体时间复杂度O(1);
如果有重复元素,set里的对象加counta和countb记录a和b个元素数,最后再遍历一遍set对比counta,countb是否相同,整体时间复杂度也为O(1);

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题