
心路历程:在刚开始,我想用数组中元素的状态来表示数字的删减,但是在多次循环时,还是会将已经删去的数字算进去,而且测试范围太大了,所以去看了题解,学习了数学方法求解。
这题在看了题解之后,用了数学方法求解(数字规模太大模拟会超时)。
自己的理解:首先确定一点,我们最后留下的数,下标一定是0,因为从第一次删除一个数开始,数组中的数字顺序变了。

最后的下标一定是0,所以我们进行反推,看看刚开始下标为几在经过遍历后才会变为0。
以第四层为例,由于我们的m=3,所以我们令0+3,但是超过了数组下标,所以进行取余操作,
(0+3)%2,由此,我们可以推出我们的递推公式为(cnt+m)%i。

网友评论