2021年02月09日 周二 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】
本文目录
1. 约瑟夫问题
剑指 Offer 62. 圆圈中最后剩下的数字
本题就是著名的约瑟夫问题:N个人围成一圈,第一个人从1开始报数,报M的将被杀掉,下一个人接着从1开始报。如此反复,最后剩下一个,求最后的胜利者。
2. 题解
2.1 模拟法(超时)
这种方法就是用数组模拟整个过程,核心思路是直接计算下一个待删除数的索引: idx = (idx + m - 1)%n;
时间复杂度很高,为 O(mn),leetcode会超时。
class Solution {
public:
int lastRemaining(int n, int m) {
vector<int> vec