如何高效的从一个数组中过滤掉另一个数组中的元素
问题描述:
我有一个两个int数组
数组A{1,2,3,4,...}和数组B{4,7,9,8,...}
我想做到的是从数组A中过滤掉数组B中的数,
请问有什么比较快的方法
我想最笨的方法是从数组A中顺序的取一个数a[i],然后与数组B中所有的数进行比较,如果数组B中存在a[i]这个数,那么在数组A中删除数a[i]
有没有比这高效的方法,求解
PS:两个数组中的数是没有任何规律的
[解决办法]
HashSet 就可以实现啊。但是效率一般
[解决办法]
首先将两个数组进行递增排序,然后取一个数据A的最大值a[max]与第二个数组B的最小值a[min]开始比较
如果A[max]>B[min],这比较B[min+1],直到找到B[min+x]>=A[max]为止,记录下x值
然后比较B[min]和A[max-1],直到找到B[min]<=A[max-y]为止,记录下y值
这时找到了两个数组中值域范围内的交集
再根据x、y将两个数组分别分割,形成的新数组再用这个方式比较,这样就能找到相同的值了。
[解决办法]
放入集合中,然后a.removeAll(b);