兩個容量很大的數組a,b(已經排好序了),求兩個數組的交集

題目:兩個容量很大的數組(已經排好序了),求兩個數組的交集


  1. 窮舉法

雙層for循環進行遍歷,外層a數組中的每一個值與內層b數組中的每一個值進行比較,找到兩個數組的交集。

  1. 進階一:

題中已經說了是排好序的數組,我們利用這個條件進行優化:
兩個數組 ——> a:{4,6,7,……} b:{2,3,5,……}
想一想,a數組第一個是4,第一次比較,我們並不需要4與b中所有的數組全部比較,一旦發現a數組中的數找到相等的或者小於b中的元素,我們可以退出此次循環。

  1. 進階二:

基於上面的優化,進一步優化:
以4爲例,在數組b中比4小的有2和3,此時5比4大,退出循環,開始a數組中6元素的比較。這時候難道還需要從b數組索引爲0的位置進行比較嗎?已經排好序了,比4小的值,一定會比6小。
所以,每當a數組遍歷下一個元素的時候(比如6),我們將跳過a數組上一個元素與b數組已經進行過的比較(跳過b數組中的小於a數組元素4的值)。

  1. 最終版:

這樣的兩個數組——> a:{1,2,3,……6000} b:{5000,5001,……10000}
出現的問題:a白白的遍歷了5000次呀!!!
解決:分組,找範圍
如上的兩個數組,我們可以先判斷兩個數組的首末位置的值,然後將兩個數組進行切分
a切分成:{5000……6000}     b切分成:{5000……6000}
此時在採取進階二里面的方法,完美解決問題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章