问题描述
有一个数组A{1,3,4,5,7,8,9,10......},长度为M,注意此数组按升序排列,有另一数组B{2,3,4,5,6,7,8,9,...}长度为N,注意此数组也是升序的,现在要求用一个循环统计两个数组中共有的元素的个数。注意是要求一个循环统计实现。
解决方案
把其中的一个数组放数一个集合中,然后用一个循环把另外的一个数组一个一个的进行比较.并设计一个指示器,如果后面数组中的数大于前面数组就不用比较,减少不必要的循环次数^^
解决方案二:
先放进把数组中的元素放进集合中,然后判断集合中是否有相同的元素,有的话就移除该元素,同时给一个Integer类型的标识,移除一个就对该标识加1可以参考如下代码...... List<String> tmpList = new ArrayList<String>(tmpStrIds); List<String> delList = new ArrayList<String>(); for(int i=tmpList.size()-1;i>=0;i--){ String user = tmpList.remove(i); //删除该元素 if (delList.contains(user) || //是否删除过 tmpList.contains(user)) { //是否删除后还有相同的 delList.add(user); } else { tmpList.add(user); //如果没有重复的再放回去 } }
解决方案三:
// 求两个有序数组的交集// a1,a2为源数组// len1,len2分别为源数组的长度// 返回交集的个数int intersect(int *a1,int len1,int *a2,int len2){int i=0,j=0,k=0;while (i<len1 && j<len2){if(a1[i] == a2[j]){k++;i++;++j;}else if(a1[i] > a2[j])++j;else++i;}return k;}
解决方案四:
该死的zoozooll