消失的數字;及格點數目分析

紫鳳發表於2013-08-28

今日面試題:消失的數字

從1到n,n個數字,每個數字只出現一次。現在,隨機拿走一個數字,請給出方法,找到這個數字。

如果隨機拿走兩個數字呢?

如果隨機拿走k個數字呢?

=============================================

格點數目分析

原題

給定平面上的兩個格點P1(x1,y1),P2(x2,y2),線上段P1P2上,除P1、P2外,一共有多少個格點?格點定義為x和y都是整數的點。

分析

這是一個簡單的題目,方法比較多了,比如,首先求的直線的方程式:y=ax+b。然後在x軸,從x1+1開始,到x2-1結束,將每一個整數帶入上面的方程式,得到y值。如果y滿足y1

那麼有沒有更快的方法呢?這個題目實際上是求|x1-x2|和|y1-y2|的最大公約數,格點數目就是最大公約數減取1。大家可以畫畫圖,驗證這個方法。最好是畫一個棋盤。

大家還記得最大公約數是怎麼計算的麼?輾轉相除法。設a和b的最大公約數為gcd(a,b),則gcd(a,b) = gcd(b, a%b)。公式比較簡單,改如何分析時間複雜度呢?是否更快呢?

我們假設a>b,則有如下的過程

gcd(a, b) = gcd(b, a%b) = gcd(a%b, b % (a % b)) …

一直遞迴到結束,gcd(x, 0) = x。

當b>a/2時,a % b = a - b < a / 2

當b<a/2時,a % b < b < a / 2

每一次新的遞迴,第一個引數都要小於原來的一半,所以,估計其時間複雜度在O(log max(a,b))以內,這裡的a和b分別為|x1-x2|和|y1-y2|。比線性的解決方案要快。

【分析完畢】

本文來自微信:待字閨中,2013-08-22釋出,原創@陳利人 ,歡迎大家繼續關注微信公眾賬號“待字閨中”。

相關文章