16、找出第k大的數字所在的位置。寫一段程式,找出陣列中第k大小的數,輸出數所在的位置。例如中,第一大的數是7,位置在4。第二大、第三大的數都是4,位置在1、3隨便輸出哪乙個均可。
答案:先找到第k大的數字,然後再遍歷一遍陣列找到它的位置。所以題目的難點在於如何最高效的找到第k大的數。
我們可以通過快速排序,堆排序等高效的排序演算法對陣列進行排序,然後找到第k大的數字。這樣總體複雜度為o(nlogn)。
我們還可以通過二分的思想,找到第k大的數字,而不必對整個陣列排序。從陣列中隨機選乙個數t,通過讓這個數和其它數比較,我們可以將整個陣列分成了兩部分並且滿足,<。
在將陣列分成兩個陣列的過程中,我們還可以記錄每個子陣列的大小。這樣我們就可以確定第k大的數字在哪個子陣列中。
然後我們繼續對包含第k大數字的子陣列進行同樣的劃分,直到找到第k大的數字為止。
平均來說,由於每次劃分都會使子陣列縮小到原來1/2,所以整個過程的複雜度為o(n)。
21、平面內有11個點,由它們連成48條不同的直,由這些點可連成多少個三角形?
解析:首先你要分析,平面中有11個點,如果這些點中任意三點都沒有共線的,那麼一共應該有c(11,2)=55, 可是,題目中說可以連線成48條直線,那麼這11個點中必定有多點共線的情況。 55-48=7,從7來分析:
假設有一組三個點共線,那麼可以組成的直線在55的基礎上應該減去c(3,2)-1=2 2*3=6≠7,因此,可以斷定不僅有三點共線的,也可能有四個點共線的可能。
假設有一組四個點共線,那麼可以組成的直線在55的基礎上應該減去c(4,2)-1=5
(備註,五個點共線的可能不存在,因為,c(5,2)-1=9>7,故不可能有五條直線共線。)
因此,三點共線少2條,4點共線少5條,只有乙個4點共線,乙個3點共線才能滿足條件,其餘情況不能滿足少了7條直線。
那麼,這11個點能組成的三角形的個數為,c(11,3)-c(3,3)-c(4,3)=165-1-4=160 (備註,三個點共線不能組成三角形)
**
2015百度最新面試題
一。乙個大的含有50m個url的記錄,乙個小的含有500個url的記錄,找出兩個記錄裡相同的url。二。微博上,每個使用者可以傳送一條訊息,可以 follow 另乙個使用者,當使用者傳送訊息時,所有 follow 他的使用者都能看見這條訊息。如 a follow b,則 b 的訊息,a 都能看見。實...
最新百度面試題目一
現在有1千萬個隨機數,隨機數的範圍在1到1億之間。現在要求寫出一種演算法,將1到1億之間沒有在隨機數中的數求出來。解決辦法 一 用乙個32位的整數32位表示32個數,1億 32 3125000,使用3.125 4m byte空間即可儲存1億個數,即index 3125000 二 對於數n,n 1 3...
百度面試題
有一根27厘公尺的細木桿,在第3厘公尺 7厘公尺 11厘公尺 17厘公尺 23厘公尺這五個位置上各有乙隻螞蟻。木桿很細,不能同時通過乙隻螞蟻。開始時,螞蟻的頭朝左還是朝右是任意的,它們只會朝前走或調頭,但不會後退。當任意兩隻螞蟻碰頭時,兩隻螞蟻會同時調頭朝反方向走。假設螞蟻們每秒鐘可以走一厘公尺的距...