Swift ~ 乘法表中第K小的数

2019-02-15  本文已影响0人  派大星的博客
func findKthNumber(_ m: Int, _ n: Int, _ k: Int) -> Int {
    var left = 1
    var right = m * n
    while left < right {
        let mid = (left + right) / 2
        var count = 0
        
        var i = 1 // 计算每一行比mid小的元素个数之和 与 k 的大小关系
        
        while i <= m {
            let tmp = i * n < mid ? n : mid / i
            count += tmp
            i += 1
        }
        
        if count < k {
            left = mid + 1
        } else {
            right = mid
        }
    }
    return left
}
上一篇 下一篇

猜你喜欢

热点阅读