Home > Backend Development > PHP Tutorial > javascript - 简单的百度校招题,看有多种解法?

javascript - 简单的百度校招题,看有多种解法?

WBOY
Release: 2016-06-06 20:11:05
Original
911 people have browsed it

javascript - 简单的百度校招题,看有多种解法?

回复内容:

javascript - 简单的百度校招题,看有多种解法?

我没有做过这道题目,临时想到的算法:

对目标解二分,假设当前数是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就是你要的结果

<code>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)</code>
Copy after login
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template