找出兩個數組的相同元素,最優演算法?

來源:互聯網
上載者:User

標籤:莫名其妙   交換   總結   span   資料   ret   重複元素   遇到   左右   

       在做新舊介面交替過程中,遇到了老介面和新介面json資料有些不一致的情況,需要比較兩個json對象,把相同的元素賦其中一個json對象中變數的值。而且其中一個json最後輸出格式還需要改變下屬性名稱,思來想去覺得和“找出兩個數組相同元素”很像,所以做下總結。

       “有一個數組A{0,2,3,5}和一個數組B{3,5,6,2,1,1},找出這兩個數組相同元素。”

      一開始抽象出這道題時,腦海裡浮現出最簡單粗暴的方法,逐一比較。

//最簡單粗暴的做法,逐個比較,時間複雜度為(B.length)^(A.length),b的a次方了,時間複雜度相當高for(int i = 0 ;i < A.length ; i ++){   for(int j = 0 ;j < B.lengh;j++){       if( A[i] == B[j] ){           System.out.println(A[i]);       }        }}

     後面腦子一轉,可以先排序再進行比較,排序的話,用最慢的冒泡排序法,時間複雜度是(B.length)^2+(A.length)^2+(一些莫名其妙的比較演算法),總之時間複雜度比上面那個演算法低就是了。這是第二種演算法,就不貼代碼了。

   第三種演算法,思路是先把兩個數組合并,再排序一下,重複的元素自然就出來了,而至於說B數組裡面本來就有重複元素,這個簡單,把B數組先去重再和A數組合并就行了。

就是說B數組{3,5,6,2,1,1},經過去重後變成{3,5,6,2,1}

public void deDuplication(int[] oraginalArr){    for(int i = 0 ; i < oraginalArr.length ;i++){         if(int[i]==int[i+1]){            System.out.println(int[i]);
} }}

//用最慢的冒泡排序法,從小到大排列public int[] sort(int[] messyArr){ for(int i = 0 ;i < messyArr.length ;i++){ for(int j = (i+1) ; j < (messyArr.length) ; j++ ){ //如果第一個數比第二個數大,則兩數交換 if(messyArr[i] > messyArr[j ]){ int temp = messyArr[i]; messyArr[i] = messyArr[j ]; messyArr[i+1] = temp; } }
return messyArr;
}

 

這樣子時間複雜度一下子就變成了B.length+(B.length)^2,這就是演算法的魅力。

網上又查了一些資料,還有一個用堆排序來找出兩數組的相同元素的,時間複雜度在n(log2n)左右,感覺時間複雜度應該是最低的吧。

至於用HashMap,HashSet去重的,我感覺這些集合內部應該也是用了某種演算法吧,感覺還是自己寫的演算法可以計算時間複雜度比較好一點,效能一算就知道了,如果有小夥伴能分析hashMap和hashSet去重的時間複雜度,歡迎探討,謝謝。

 

找出兩個數組的相同元素,最優演算法?

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.