一道面試附加題的另類求解

來源:互聯網
上載者:User

  有一段時間沒有寫部落格了。今日閑逛的時候,看到一篇部落格“4月7日某公司在華南地區舉辦了一年一度的"開發人員"聚會——記某公司筆試”。裡面有作者回憶的面試題。其中一題引起了筆者的注意,題目如下:

  題目:已知一個數組a[N],構造一個數組b[N],構造規則:b[i]=a[0]*a[1]*a[2]...a[N]/a[i];
  要求:
     1、不可以使用除法;
     2、時間複雜度為O(n),空間複雜度為S(0);
     3、除遍曆使用的變數外,不可以使用其它變數;

 

  看似簡單,想想也廢了一番腦筋。

  最先想到的是就是原作者想到的方法,代碼如下(用的是VB2008): 

  Public Shared Function CacuB1(ByVal A() As Double) As Double()
    Dim B(A.Length - 1) As Double
    Dim I As Integer
    B(0) = 1
    For I = 0 To A.Length - 1
      B(0) *= A(I)
    Next
    For I = A.Length - 1 To 0 Step -1
      B(I) = B(0) / A(I)
    Next
    Return B
  End Function

  這個方法還是比較簡潔的,沒有多餘的代碼。唯一不符合要求的就是用了除法     

  那還是老老實實的用最基本的方法,代碼如下:

  Public Shared Function CacuB2(ByVal A() As Double) As Double()
    Dim B(A.Length - 1) As Double
    Dim I As Integer, J As Integer
    For I = 0 To A.Length - 1
      B(I) = 1
      For J = 0 To A.Length - 1
        If I <> J Then B(I) *= A(J)
      Next
    Next

    Return B
  End Function

  雖然計算量上去了,但沒有用除法。不過演算法的時間複雜度為O(N*N),不符合題目要求。而且這種方法比較死板,筆者不推薦。

 

  想了很久,總是在使用除法和時間複雜度之間沒法平衡。

  突然,一個念頭一閃而過。除法?轉一個彎如何?轉成減法如何?

  利用公式S/A=10lgS-lgA

  於是本題就變成

    S=A(0)*A(1)*A(2)……*A(N)

    B(I)=10lgS-lgA(I)  

  代碼如下:

  Public Shared Function CacuB3(ByVal A() As Double) As Double()
    Dim B(A.Length - 1) As Double
    Dim I As Integer
    B(0) = 1
    For I = 0 To A.Length - 1
      B(0) *= A(I)
    Next
    For I = A.Length - 1 To 0 Step -1
      B(I) = 10 ^ (Math.Log10(B(0)) - Math.Log10(A(I)))
    Next
    Return B
  End Function

 

  符合題目要求了嗎?符合了,沒用除法,時間複雜度也是O(N)。只是效率稍微低了點。

  但是效率真的低嗎?不見得,VS對Log10函數做了最佳化,雖然低了點,但是可以忽略不計。

  利用高中階段的對數公式,另類的解決了該問題。如果誰還有更好的演算法,望不吝賜教。大家互相學習,共同提高。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.