javascript - 簡單的百度校招題,看有多種解法?

來源:互聯網
上載者:User
關鍵字 javascript c++ c java php

回複內容:

我沒有做過這道題目,臨時想到的演算法:

對目標解二分,假設當前數是num,那麼遍曆每一行,對於第i行,不大於num的數字個數是min(num / i, m),累加之後得到總的計數cnt

如果cnt小於k那麼到右半區間繼續找;否則到左半區間繼續找。

時間複雜度O(n * log(n * m)),綽綽有餘。

直接使用下標查詢,每一行都是第一行的倍數

可以發現乘法表計算結果的大小是按照對角線排列的,因此按照這個方法找規律即可。

n*m的矩陣結果你是一定需要的。
我給你個方法,造一個0-n*m的數組A,每個元素都為0,
然後你兩個for迴圈計算出矩陣中的每個數t,將A[t]++,
計算完了之後你有一個一維數組可能是這樣的【0,1,2,3,1,0,2,5,。。。】
你從左往右加,直到到結果大於等於K,此時的下標i就是你要的結果

def multiply(n, m, k):    if k > n * m:        return None    l = []    for i in range(1, n + 1):        for j in range(1, m + 1):            l.append(i * j)    return l[k]print multiply(2,3, 7)
  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.