当前位置: 代码迷 >> 高性能WEB开发 >> 怎么高效的从一个数组中过滤掉另一个数组中的元素
  详细解决方案

怎么高效的从一个数组中过滤掉另一个数组中的元素

热度:236   发布时间:2012-02-21 16:26:23.0
如何高效的从一个数组中过滤掉另一个数组中的元素
问题描述:

我有一个两个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);
  相关解决方案