首页 > 其他分享 >剑指 Offer 62. 圆圈中最后剩下的数字

剑指 Offer 62. 圆圈中最后剩下的数字

时间:2023-04-13 22:35:16浏览次数:48  
标签:位置 Offer int 元素 62 数组 圆圈

题目链接:剑指 Offer 62. 圆圈中最后剩下的数字

方法:约瑟夫环 + 倒推

解题思路

  • 假设我们最好剩余的数字是 \(N\)。
  • 执行完 "删除第三个元素" 的操作后,\(N\) 在新数组中的位置 \(P\) 的意义是什么?它表示,在新数组中,\(N\) 前面有还有 \(P\) 个元素。那么,在当前数组中,\(N\) 前面一定有 \(P+3\) 个元素。 明白了这一点即可开始倒推。
  • 最后一轮:当前有 \(1\) 个元素。\(N\) 的位置是 \(0\);
  • 倒数第 \(2\) 轮:当前有 \(2\) 个元素。已知在执行完 "删除第三个元素" 后,\(N\) 在新数组中的位置是 \(0\)。则说明在本轮中 \(N\) 前面有 \(0+3=3\) 个元素,所以 \(N\) 的位置是 \(3\),然而本轮只有 \(2\) 个元素,所以 \(N\) 的实际位置是 \((0+3)%2=1\);
  • 倒数第 \(3\) 轮:当前有 \(3\) 个元素。已知在执行完 "删除第三个元素" 后,\(N\) 在新数组中的位置是 \(1\)。说明此刻,\(N\) 前面有 \(1+3=4\) 个元素,所以 \(N\) 的位置是 \(4\)。而当前数组只有 \(3\) 个元素,故实际位置是 \((1+3)%3=1\);
  • ...

代码

class Solution {
public:
    int lastRemaining(int n, int m) {
        int x = 0;
        for (int i = 2; i <= n; i ++ ) {
            x = (x + m) % i;
        }
        return x;
    }
};

复杂度分析

时间复杂度:\(O(n)\);
空间复杂度:\(O(1)\)。

标签:位置,Offer,int,元素,62,数组,圆圈
From: https://www.cnblogs.com/lxycoding/p/17316790.html

相关文章

  • HDU 4628 Pieces (状压DP)
    题目地址:HDU4628这题没想到怎么快速枚举子状态。。。看了题解才知道的。用for(state=i;state>0;state=(state-1)&i)就可以了。这题的具体做法是先预处理出所有的状态是不是回文串,然后就是普通的DP了。代码如下:#include<iostream>#include<string.h>#include<math.h>......
  • 【剑指 Offer】 39. 数组中出现次数超过一半的数字
    【题目】数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例1:输入:[1,2,3,2,2,2,5,4,2]输出:2 限制:1<=数组长度<=50000 来源:力扣(LeetCode)链接:https://leetcode.cn/problems/shu-zu......
  • 【剑指 Offer】 56 - II. 数组中数字出现的次数 II
    【题目】在一个数组nums中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。示例1:输入:nums=[3,4,3,3]输出:4示例2:输入:nums=[9,1,7,9,7,9,7]输出:1 限制:   1<=nums.length<=10000   1<=nums[i]<2^31 来源:力扣(LeetCode)链接:http......
  • mysql主从1062主键冲突跳过错误
    1062错误——主键冲突,出现这种情况就是从库出现插入操作,主库又插入相同的数据,iothread没问题,sqlthread出错处理此种错误一般有两种思路:1、直接跳过错误执行语句2、找到错误执行语句,修复主库2数据https://www.cndba.cn/leo1990/article/2957https://www.cndba.cn/leo1990/articl......
  • 力扣---剑指 Offer 39. 数组中出现次数超过一半的数字
    数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入:[1,2,3,2,2,2,5,4,2]输出:2 限制:1<=数组长度<=50000注意:本题与主站169题相同:https://leetcode-cn.com/problems/majority-el......
  • 7662: 大盗阿福 01背包/动态规划
    描述 阿福是一名经验丰富的大盗。趁着月黑风高,阿福打算今晚洗劫一条街上的店铺。这条街上一共有 N家店铺,每家店中都有一些现金。阿福事先调查得知,只有当他同时洗劫了两家相邻的店铺时,街上的报警系统才会启动,然后警察就会蜂拥而至。作为一向谨慎作案的大盗,阿福不愿意冒着被......
  • 【图论之拓扑排序】剑指 Offer II 114. 外星文字典
    剑指OfferII114.外星文字典讲解传送门constintN=26,M=N*N;classSolution{public:inth[N],e[M],ne[M],idx=0;boolst[N];intin[N],cnt=0;//上面三行要写在classSolution内部,不然每次调用不会清空voidadd(inta,intb){......
  • 哈希表:剑指 Offer 48. 最长不含重复字符的子字符串
    题目描述:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。   提示:s.length<=40000 思路:双指针(滑动窗口)+哈希表:   复杂度分析:时间复杂度O(N):其中N为字符串长度,动态规划需遍历计算dp列表。空间复杂度O(1......
  • 62、Prometheus-远端存储-Influxdb部署
    1、基础知识1.1、官方文档https://docs.influxdata.com/influxdb/v1.8/supported_protocols/prometh1.2、需求需把要prometheus数据存到其他远程服务器上2、Influxdb部署2.1、配置yum源cat<<EOF|sudotee/etc/yum.repos.d/influxdb.repo[influxdb]name=Influx......
  • Codeforces Round 862 (Div. 2)
    CodeforcesRound862(Div.2)Date:04/07/2023Link:Dashboard-CodeforcesRound862(Div.2)-CodeforcesA|WeNeedtheZeroBrief:给定非负整数序列,求一个\(x\),使得序列每个元素异或\(x\)后再全部异或起来的结果为\(0\).没有输出\(-1\).Data:\(T\leq1e3,......