日期:2014-05-20  浏览次数:20723 次

判断两个无序数组相等问题
例如
String[]   a={ "1 ", "2 ", "3 ", "3 "};
  String[]   b={ "1 ", "3 ", "3 ", "2 "};
判断是否相等   这样是相等的,
请问这样的算法怎样实现

------解决方案--------------------
如果能忍受转化成List的效率损失,那倒好办了,转化成List后,直接:
return list1.containsAll(list2) && list2.containsAll(list1);
就可以了。:P
------解决方案--------------------
public class test {
public static void main(String[] arg){
String[] a={ "1 ", "2 ", "3 ", "3 "};
String[] b={ "1 ", "3 ", "3 ", "2 "};
boolean equal=true;
for(int i=0; i <a.length; i++)
if(number(a[i],a)!=number(a[i],b)) equal=false;
System.out.println(equal);
}
static int number(String k, String s[]) {
int total=0;
for(int i=0; i <s.length; i++)
if(k.contentEquals(s[i])) total++;
return total;
}
}
------解决方案--------------------
用String.hashCode();
public class test
{
public boolean arrayEquals(String[] a,String[] b)
{
if(a.length!=b.length)
return false;
else
{
int ta=0,tb=0
for(int i=0;i <a.length;++i)
{
ta+=a[i].hashCode();
tb+=b[i].hashCode();
}

if(ta==tb)
return true;
else return false;
}
}


public static void main(String[] arg)
{
String[] a={ "1 ", "2 ", "3 ", "3 "};
String[] b={ "1 ", "3 ", "3 ", "2 "};

System.out.println(this.arrayEquals(a,b));
}

}
------解决方案--------------------
较好的苯方法(以空间换取些时间):
将其中一个转化为一个List(你自己写),每个元素的值就是数组的一个值,
然后:
int iIndex = 0;
for (iIndex = 0; iIndex < length; iIndex++)
{
while(pElement != NULL)
{
if (数组[iIndex] == pElement-> next-> m_data)
{
删除当前List本元素节点。
pElement-> next = pElement-> next-> next;
}
}
}
中间有缺的部分,比如List第一个元素的比较等自己完善吧,还有自己写的单链表
在比较删除的时候可以快一些,不过只针对此题目。
删元素的时候别忘了内存泄漏。
比一个删一个也不会犯漏比错误
1, 1,2,2,3,3;
1, 1,1,2,3,3;
这种情况你的算法可能会有问题的。