求避开直线障碍物的最小跳跃长度:为何测试用例[1000,999]输出为6?
问题规则回顾
给定整数数组代表直线上的障碍物坐标,从坐标0向右跳跃,每次只能用固定整数长度k跳跃(落点为k、2k、3k…),需找到最小的k,使得所有跳跃落点都不与障碍物坐标重合。
测试用例
[1000, 999] 的输出解释 我们从最小的正整数开始逐一验证k是否符合要求:
k=1:所有数都是1的倍数,跳跃落点会覆盖所有障碍物,排除。k=2:1000是2的倍数(1000=2×500),跳跃到第500次时会落在1000,碰到障碍物,排除。k=3:999是3的倍数(999=3×333),跳跃到第333次时会落在999,碰到障碍物,排除。k=4:1000是4的倍数(1000=4×250),跳跃到第250次时会落在1000,碰到障碍物,排除。k=5:1000是5的倍数(1000=5×200),跳跃到第200次时会落在1000,碰到障碍物,排除。k=6:验证两个障碍物:999 ÷ 6 = 166余3,即999不是6的倍数,跳跃落点不会到999;1000 ÷ 6 = 166余4,即1000也不是6的倍数,跳跃落点不会到1000。
因此k=6满足要求,且是第一个符合条件的最小整数,所以预期输出为6。
内容的提问来源于stack exchange,提问作者Meena Arumugam
相关产品推荐
相关产品推荐

