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

解决方案 »

  1.   

    public boolean isEques(String[] a, String[] b) {
    boolean flag = false;
    if (a.length != b.length) {
    flag = false;
    } else {
    for (int i = 0; i < a.length; i++) {
    for (int j = 0; j < a.length; j++) {
    // pan duan xia tian jian
    if (a[i] == b[j]) {
    flag = true;
    break;
    }// ke yi bu yao
    for (int k = 0; k < a.length; k++) {
    if (flag && (b[i] == a[j])) {break;
    } else {flag = false;
    }
    }
    }
    }}
    return flag;
    }
    这样写感觉效率好低,请高手指点
      

  2.   

    把两个数组转化为List。
    在用集合框架的包装Connections类对list排序,在比较
      

  3.   

    如果能忍受转化成List的效率损失,那倒好办了,转化成List后,直接:
    return list1.containsAll(list2) && list2.containsAll(list1);
    就可以了。:P
      

  4.   

    应该是直接排序后比较效率会高些。因为排序的复杂度可以是O(nlogn),而遍历比较的复杂度是O(n),相对于前者可不忽略。
    我感觉你自己写的算法也不大可能再优于O(nlogn)了。
      

  5.   

    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;
        }
    }
      

  6.   

    如果还要考虑效率,main中的for可以改为:
         int i=0;
         boolean equal=true;
         while(i<a.length && equal)
         if(number(a[i],a)!=number(a[i++],b)) equal=false;
      

  7.   

    if (a[i] == b[j]) ?
    字符串比较应该用equals吧
      

  8.   

    要求不要先排序,而 把两个数组转化为List。  
    在用集合框架的包装Connections类对list排序,在比较时间复杂度也是比较高吧,不过实现起来较简单
      

  9.   

    steedhorse(晨星) ( )  说得很有道理
      

  10.   

    用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));
    }}
      

  11.   

    较好的苯方法(以空间换取些时间):
        将其中一个转化为一个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;
    这种情况你的算法可能会有问题的。