Leetcode-圆圈中最后剩下的数字 约瑟夫环问题 原理推理简单易懂

博客介绍了LeetCode中关于圆圈中最后剩下的数字问题,即约瑟夫环问题的推导过程。通过举例说明,解释了如何从数组中按特定顺序删除元素,直到只剩下一个数字,并强调理解该问题的关键在于元素在不同数组中的坐标变化。文章提出了一个递推公式f(n) = (f(n-1) + m) % n,用于求解最后剩下的数字的坐标,指出初始条件f(1) = 0,并给出了利用递推关系实现的代码解决方案。
摘要由CSDN通过智能技术生成

问题描述

Leetcode 题目描述
Leetcode 题解
因为官方题解以及网上其他题解比较难以理解,自己经过思考和推导,终于理清楚其数学原理,现进行分析,欢迎各位同学建议、指正

推导过程

举例说明:
已知一个数组[1, 2, 3],每次删除第3个数字. 那么过程如下所示:

  • 删除前[1, 2, 3] --> 删除后[1, 2], 删除坐标为2,即(3 - 1) % 3;
  • 删除前[1,2] --> 删除后[2],删除坐标为0, 即(3 - 1) % 2
  • 返回数组[2]剩下数字,2,坐标2为0

一般答案题解在专注于这个过程,导致很难去理解递推公式的f(n) = (f(n-1) + m) % n 的f(n)和f(n-1)到底是什么意思。
但是其实这个题目就是一个坐标问题,不用关心它到底删除的是哪个元素,换个思路去理解。
我们需要明确一下几个明显的推导前提:

  • 一旦数组大小和每次删除第几个元素给定,那么数组最后剩下
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值