【每日算法Day 83】邻居小孩一年级就会的乘法表,你会吗?

简介: LeetCode 668. 乘法表中第k小的数

题目链接


LeetCode 668. 乘法表中第k小的数[1]

题目描述



image.png

示例1

输入:m = 3, n = 3, k = 5输出:3解释:乘法表:1  2 32  4 63  6 9第5小的数字是 3 (1, 2, 2, 3, 3).

示例2


输入:m = 2, n = 3, k = 6输出:6解释:乘法表:1  2 32  4 6第6小的数字是 6 (1, 2, 2, 3, 4, 6).

说明:

image.png

题解


二分法



image.png

二分法+优化



image.png


二分法(c++)

classSolution {
public:   
intfindKthNumber(intm, intn, intk) {   
intl=1, r=m*n;     
while (l<r) {     
intmid=l+((r-l)>>1);      
if (enough(mid, m, n, k)) r=mid; 
elsel=mid+1;    
        }     
returnl;  
    }
boolenough(intx, intm, intn, intk) {  
intcnt=0;   
for (inti=1; i<=m; ++i) {   
cnt+=x/i<n?x/i:n;     
        }    
returncnt>=k; 
    }
};

二分法+优化(c++)

classSolution {
public:   
intfindKthNumber(intm, intn, intk) { 
intl=1, r=k;    
while (l<r) {  
intmid=l+((r-l)>>1);    
if (enough(mid, m<mid?m:mid, n<mid?n:mid, k)) r=mid;            elsel=mid+1;   
        }      
returnl; 
    }
boolenough(intx, intm, intn, intk) { 
intcnt=n*(x/n), d=0; 
for (inti= (x/n)+1; i<=m; i=d+1) { 
d=x/(x/i);    
cnt+= (x/i)*((d<m?d:m)-i+1);   
        }     
returncnt>=k;  
    }
};

二分法(python)

classSolution:
deffindKthNumber(self, m: int, n: int, k: int) ->int:  
defenough(x, m, n, k):    
cnt=0foriinrange(1, m+1):     
cnt+=x//iifx//i<nelsenreturncnt>=kl, r=1, m*nwhilel<r:    
mid=l+((r-l)>>1)    
ifenough(mid, m, n, k): r=midelse: l=mid+1returnl

二分法+优化(python)

classSolution: 
deffindKthNumber(self, m: int, n: int, k: int) ->int:  
defenough(x, m, n, k):   
cnt, i, d=n*(x//n), x//n+1, 0whilei<=m:   
d=x//(x//i)     
cnt+= (x//i)*((difd<melsem)-i+1)    
i=d+1returncnt>=kl, r=1, kwhilel<r:  
mid=l+((r-l)>>1)   
ifenough(mid, mifm<midelsemid, nifn<midelsemid,
k): r=midelse: l=mid+1returnl

参考资料

[1]

LeetCode 668. 乘法表中第k小的数: https://leetcode-cn.com/problems/kth-smallest-number-in-multiplication-table/

image.png

作者简介:godweiyang知乎同名华东师范大学计算机系硕士在读,方向自然语言处理与深度学习喜欢与人分享技术与知识,期待与你的进一步交流~


相关文章
|
11月前
|
算法 C++ Python
【每日算法Day 83】邻居小孩一年级就会的乘法表,你会吗?
【每日算法Day 83】邻居小孩一年级就会的乘法表,你会吗?
|
1月前
|
算法
【MATLAB】语音信号识别与处理:滑动平均滤波算法去噪及谱相减算法呈现频谱
【MATLAB】语音信号识别与处理:滑动平均滤波算法去噪及谱相减算法呈现频谱
45 0
|
1月前
|
传感器 算法 计算机视觉
基于肤色模型和中值滤波的手部检测算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容是关于一个基于肤色模型和中值滤波的手部检测算法的描述,包括算法的运行效果图和所使用的软件版本(matlab2022a, vivado2019.2)。算法分为肤色分割和中值滤波两步,其中肤色模型在YCbCr色彩空间定义,中值滤波用于去除噪声。提供了一段核心程序代码,用于处理图像数据并在FPGA上实现。最终,检测结果输出到&quot;hand.txt&quot;文件。
|
1月前
|
机器学习/深度学习 算法 计算机视觉
基于yolov2深度学习网络的视频手部检测算法matlab仿真
基于yolov2深度学习网络的视频手部检测算法matlab仿真
|
1月前
|
算法
【MATLAB】语音信号识别与处理:移动中位数滤波算法去噪及谱相减算法呈现频谱
【MATLAB】语音信号识别与处理:移动中位数滤波算法去噪及谱相减算法呈现频谱
23 2
|
1月前
|
算法
【MATLAB】语音信号识别与处理:卷积滑动平均滤波算法去噪及谱相减算法呈现频谱
【MATLAB】语音信号识别与处理:卷积滑动平均滤波算法去噪及谱相减算法呈现频谱
33 0
|
1月前
|
算法
【MATLAB】语音信号识别与处理:一维信号NLM非局部均值滤波算法去噪及谱相减算法呈现频谱
【MATLAB】语音信号识别与处理:一维信号NLM非局部均值滤波算法去噪及谱相减算法呈现频谱
40 1
|
6天前
|
机器学习/深度学习 人工智能 算法
基于DCT和扩频的音频水印嵌入提取算法matlab仿真
本文介绍了结合DCT和扩频技术的音频水印算法,用于在不降低音质的情况下嵌入版权信息。在matlab2022a中实现,算法利用DCT进行频域处理,通过扩频增强水印的隐蔽性和抗攻击性。核心程序展示了水印的嵌入与提取过程,包括DCT变换、水印扩频及反变换步骤。该方法有效且专业,未来研究将侧重于提高实用性和安全性。
|
10天前
|
文字识别 算法 计算机视觉
图像倾斜校正算法的MATLAB实现:图像倾斜角检测及校正
图像倾斜校正算法的MATLAB实现:图像倾斜角检测及校正
15 0
|
13天前
|
机器学习/深度学习 算法
【MATLAB】GA_ELM神经网络时序预测算法
【MATLAB】GA_ELM神经网络时序预测算法
286 9