python查找两个数组中相同的元素_找出两个数组的相同元素,最优算法?

在做新旧接口交替过程中,遇到了老接口和新接口json数据有些不一致的情况,需要比较两个json对象,把相同的元素赋其中一个json对象中变量的值。而且其中一个json最后输出格式还需要改变下属性名,思来想去觉得和“找出两个数组相同元素”很像,所以做下总结。

“有一个数组A{0,2,3,5}和一个数组B{3,5,6,2,1,1},找出这两个数组相同元素。”

一开始抽象出这道题时,脑海里浮现出最简单粗暴的方法,逐一比较。

//最简单粗暴的做法,逐个比较,时间复杂度为(B.length)^(A.length),b的a次方了,时间复杂度相当高

for(int i = 0 ;i < A.length ; i ++){for(int j = 0 ;j < B.lengh;j++){if( A[i] ==B[j] ){

System.out.println(A[i]);

}

}

}

后面脑子一转,可以先排序再进行比较,排序的话,用最慢的冒泡排序法,时间复杂度是(B.length)^2+(A.length)^2+(一些莫名其妙的比较算法),总之时间复杂度比上面那个算法低就是了。这是第二种算法,就不贴代码了。

第三种算法,思路是先把两个数组合并,再排序一下,重复的元素自然就出来了,而至于说B数组里面本来就有重复元素,这个简单,把B数组先去重再和A数组合并就行了。

就是说B数组{3,5,6,2,1,1},经过去重后变成{3,5,6,2,1}

public void deDuplication(int[] oraginalArr){for(int i = 0 ; i < oraginalArr.length ;i++){if(int[i]==int[i+1]){

System.out.println(int[i]);

}

}

}//用最慢的冒泡排序法,从小到大排列

public int[] sort(int[] messyArr){for(int i = 0 ;i < messyArr.length ;i++){for(int j = (i+1) ; j < (messyArr.length) ; j++){//如果第一个数比第二个数大,则两数交换

if(messyArr[i] >messyArr[j ]){int temp =messyArr[i];

messyArr[i]=messyArr[j ];

messyArr[i+1] =temp;

}

}

returnmessyArr;

}

这样子时间复杂度一下子就变成了B.length+(B.length)^2,这就是算法的魅力。

网上又查了一些资料,还有一个用堆排序来找出两数组的相同元素的,时间复杂度在n(log2n)左右,感觉时间复杂度应该是最低的吧。

至于用HashMap,HashSet去重的,我感觉这些集合内部应该也是用了某种算法吧,感觉还是自己写的算法可以计算时间复杂度比较好一点,性能一算就知道了,如果有小伙伴能分析hashMap和hashSet去重的时间复杂度,欢迎探讨,谢谢。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值