LeetCode C++ 剑指 Offer 62. 圆圈中最后剩下的数字【Linked List/Math】简单
发布日期:2021-07-01 02:58:40 浏览次数:2 分类:技术文章

本文共 515 字,大约阅读时间需要 1 分钟。

0,1,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。

例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。

示例 1:

输入: n = 5, m = 3输出: 3

示例 2:

输入: n = 10, m = 17输出: 2

限制:

  • 1 <= n <= 10^5
  • 1 <= m <= 10^6

解法 规律

class Solution {
public: int lastRemaining(int n, int m) {
int ans = 0; //最后一轮剩下1个人,下标为0,所以从2个人的情况开始反推 for (int i = 2; i <= n; i++) ans = (ans + m) % i; return ans; }};

运行效率如下:

执行用时:4 ms, 在所有 C++ 提交中击败了99.90% 的用户内存消耗:6.2 MB, 在所有 C++ 提交中击败了44.99% 的用户

转载地址:https://memcpy0.blog.csdn.net/article/details/111714354 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:LeetCode C++ 剑指 Offer 63. 股票的最大利润【Dynamic Programming】中等
下一篇:LeetCode C++ 376. Wiggle Subsequence【Dynamic Programming】中等

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2024年05月02日 22时05分50秒