有點眼高手低了。好多題目兩分鐘想到算法,兩個小時還不一定能寫出一個沒bug的版本來。
其實還是自己代碼水平不行了,這幾年代碼寫得還是少。
算法第4題,求兩個排序數(shù)組的中位數(shù),有點麻煩。要保證沒有bug,簡直是費了我九牛二虎之力。
題目本身不算很難,但我一開始也沒想到好的辦法。如果兩個數(shù)組長度相同的話是很簡單的,貌似還是算法導(dǎo)論的一道習(xí)題。這種情況只要不停地做二分法就可以了,復(fù)雜度是O(logn)。
但如果兩個數(shù)組長度不同呢?我陷入了一個誤區(qū),糾纏了很久都沒想到好的辦法,還是在網(wǎng)上搜了一下才恍然大悟。其實只要保證每次兩個數(shù)組排除掉的元素個數(shù)相同就可以了,也就是每次都排除掉短的數(shù)組的當(dāng)前長度的一半即可。
方法是有了,但想實現(xiàn)個沒bug的版本也很費勁,主要是因為要照顧到各種情況。兩個數(shù)組的長度分別都可能為奇數(shù)和偶數(shù),這就是四種組合。短數(shù)組最后會剩下一個或兩個元素,再和長數(shù)組的中位數(shù)比較,才能得到最終的結(jié)果。總之我的解法為了照顧到各種情況十分冗長,if嵌套了好幾層,一個方法里面十來個return。不知道有沒有更簡潔的方法,也許是我對這個問題還沒想太透徹,但實在是沒力氣簡化了,就先這樣吧。