面試算法

https://blog.csdn.net/lisuxuan_1993/article/details/41794273


給定兩個數組X和Y,元素都是正數。請找出滿足如下條件的數對的數目:

x^y > y^x,即x的y次方>y的x次方

x來自X數組,y來自Y數組

假設數組X的長度爲m,數組Y的長度爲n,最直接的暴力法,時間複雜度爲O(m*n),但這樣的話,並不需要都是正數這個條件的。那麼,我們該如何優化呢?

x^y>y^x,對於x和y來講,有什麼規律呢?該如何發現呢?這裏其實有規律的,大多數的條件下,當y>x的時 候,x^y>y^x,但是有一些例外,1,2,3,4幾個數,需要特殊的考慮,比如2^4=4^2。這個大家可以通過在紙上寫寫畫畫來得到,相對繁瑣,我們就不進一步分析了。

我們可否對於原式做一些數學變換呢?使得式子變化簡單。如何去做呢?這個式子的複雜體現在兩邊都是指數的形式,如何變化一下呢?我們很自然的就想到,逆運算對數運算,則,兩邊取對數可得:ylog(x)>xlog(y)。這裏同學們可能要問,可以直接取對數麼?取對數之後,大小關係仍舊滿足 麼?這裏是有兩點保證的:

對數函數的性質,單調遞增

題目中的說明:元素都是正數

對於式子:ylog(x)>xlog(y),x和y都是正數,則進一步有:兩邊同時除以xy,則:log(x)/x >log(y)/y。這個式子,看起來也複雜,但是,x和y都在各自的一邊,要簡單的多。

對於log(x)/x >log(y)/y,

數組X和Y分別計算log(x)/x,log(y)/y

然後對Y進行排序O(nlogn)

遍歷X數組,對於每一個x,在Y中,進行二分查找,即可。

總的時間複雜度爲O(nlogn + mlogn).


發佈了47 篇原創文章 · 獲贊 16 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章