LeetCode:求两数归零操作次数(Java代码超时排查)
问题分析与优化方案
超时原因
- 逐次减法效率极低:当两个数差距极大时(比如
num1=10^9,num2=1),你的代码需要执行10^9次循环,这完全超出了LeetCode的时间限制。 - 循环条件错误:
num1>=0 && num2>=0会导致死循环——当其中一个数变为0后,另一个数减0不会改变数值,循环会无限执行下去,最终触发超时。
优化代码
用除法代替多次减法,一次性计算可连续操作的次数,同时修正循环条件:
class Solution { public int countOperations(int num1, int num2) { int count = 0; while (num1 != 0 && num2 != 0) { if (num1 >= num2) { count += num1 / num2; num1 %= num2; } else { count += num2 / num1; num2 %= num1; } } return count; } }
优化说明
- 除法批量统计次数:比如
num1=100,num2=3,num1/num2=33,直接把33加到count里,代替33次逐次减法的循环,大幅减少循环次数。 - 取余简化后续操作:
num1%num2得到减法后的剩余值,相当于完成所有连续减法后的结果。 - 修正循环条件:当任意一个数为0时立即停止循环,避免无效操作和死循环。
内容的提问来源于stack exchange,提问作者Sheharyar Khan
相关产品推荐
相关产品推荐

