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

简介: 剑指 Offer 62:圆圈中最后剩下的数字

题目

题目链接

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

解题

由于m,n的数量级很大,使用链表模拟直接超时了,时间复杂度是O(mn),所以不能使用这种方法。

方法一:动态规划

参考链接1

参考链接2

也就是说f(n,m)删掉第一个元素,(m-1)%n=t-1后,起始位置是m%n=t,那么就是f(n-1,m)的问题了。

由于利用动态规划,已知了f(n-1,m)删除的位置,由下图可以知道f(n,m)删除后,就是f(n-1,m)问题向后平移了一个t。

也就是说在f(n-1,m)问题中x的位置,对应于 f(n,m)中x+t的位置,也就是

(x+t)%n

=(x+m%n)%n

=(x+m)%n

又由于f(1,m)只有1个数,因此就剩余第一个数0,于是初始化dp[1]=0;

class Solution {
public:
    int lastRemaining(int n, int m) {
        vector<int> dp(n+1);
        dp[1]=0;
        for(int i=2;i<=n;i++){
            dp[i]=(dp[i-1]+m)%i;
        }
        return dp[n];
    }
};

更加简洁点,vector可以用一个变量来代替

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;
    }
};


相关文章
|
2月前
|
存储 弹性计算 人工智能
阿里云轻量应用服务器2核4G199元和云服务器2核4G199元性能、适用场景对比与选择参考
阿里云目前的活动中,两款2核4G、价格199元1年的云服务器备受关注。一款是轻量应用服务器,适合OpenClaw搭建AI助理,高带宽、不限流量,部署极简,适合个人及初创企业。另一款是通用算力型u1实例,性能均衡稳定,适合中小企业运行企业级应用,如办公系统、CRM等。两者虽价格相同,但定位与能力边界不同,用户应结合需求、技术背景及长期成本选择。
564 9
|
9月前
|
数据采集 供应链 前端开发
数据中台怎么建,才不会变成“数据坟场”?
近年来,数据中台成为企业数字化转型的热点,但不少中台项目最终沦为“数据坟场”:系统上线却无人使用,数据堆积却难以调用,BI页面美观却无实际价值。本文深入剖析数据中台的本质与常见误区,指出中台建设的核心在于“用”而非“存”,强调数据应服务于业务决策与流程。通过五个关键步骤与三个建设阶段,指导企业如何打造真正有价值的数据中台,避免资源浪费与项目失败,推动数据在流动中创造业务价值。
数据中台怎么建,才不会变成“数据坟场”?
|
5月前
|
网络协议 安全 应用服务中间件
Debian 11.1 安装Nginx 并开启HTTP3 详细教程
本文介绍如何在Linux系统中从源码编译安装支持HTTP/3的Nginx 1.25.5。涵盖系统更新、依赖安装、源码下载、配置编译参数(含HTTP/3模块)、安装及验证全过程,并提供启用HTTP/2与HTTP/3共存的nginx.conf配置示例,确保兼容性。最后提醒开放云服务器安全组的TCP/UDP 443端口以支持QUIC协议。
295 10
|
5月前
|
CDN
阿里云CDN收费标准:流量价格、带宽峰值计费及月结95带宽峰值计费说明
阿里云CDN收费包含基础费与增值费。基础费默认按流量计费,支持阶梯价及资源包抵扣;也可选按带宽峰值或月结95带宽计费。增值费如HTTPS、QUIC、WAF、实时日志等按使用收费,不使用不计费。2024年最新价格详见官方页面。
883 2
|
7月前
|
机器学习/深度学习 人工智能 监控
提示词工程深度实践:从基础原理到生产级应用优化
蒋星熠Jaxonic,AI领域技术探索者,深耕提示词工程与大语言模型应用。擅长以系统化思维构建高效人机交互方案,融合认知科学与软件工程,推动AI技术落地。致力于分享提示词设计、架构优化与生产实践,助力开发者提升AI协作能力,在代码星辰中书写极客诗篇。
|
8月前
|
IDE 编译器 开发工具
MSVC,VC++ 运行时库,msvcp140.dll,msvcp120.dll等报错
本文介绍了Microsoft Visual C++(MSVC)的核心概念、运行时库及其在Windows平台开发中的应用。内容涵盖MSVC的编译器、链接器、调试工具等核心组件,以及MSVC版本与Visual Studio的对应关系。同时解析了VC++运行时库(如msvcp140.dll)的作用和安装方式,帮助开发者理解程序依赖的底层机制,并提供常见问题的解决参考链接。
693 3
|
C# Windows 开发者
超越选择焦虑:深入解析WinForms、WPF与UWP——谁才是打造顶级.NET桌面应用的终极利器?从开发效率到视觉享受,全面解读三大框架优劣,助你精准匹配项目需求,构建完美桌面应用生态系统
【8月更文挑战第31天】.NET框架为开发者提供了多种桌面应用开发选项,包括WinForms、WPF和UWP。WinForms简单易用,适合快速开发基本应用;WPF提供强大的UI设计工具和丰富的视觉体验,支持XAML,易于实现复杂布局;UWP专为Windows 10设计,支持多设备,充分利用现代硬件特性。本文通过示例代码详细介绍这三种框架的特点,帮助读者根据项目需求做出明智选择。以下是各框架的简单示例代码,便于理解其基本用法。
1327 0
|
数据采集 DataWorks 数据管理
DataWorks不是Excel,它是一个数据集成和数据管理平台
【10月更文挑战第10天】随着大数据技术的发展,企业对数据处理的需求日益增长。阿里云推出的DataWorks是一款强大的数据集成和管理平台,提供从数据采集、清洗、加工到应用的一站式解决方案。本文通过电商平台案例,详细介绍了DataWorks的核心功能和优势,展示了如何高效处理大规模数据,帮助企业挖掘数据价值。
459 1
|
存储 Windows
删除的视频怎样才能恢复?详尽指南
误删视频别慌,本文概览实用恢复技巧。首要行动:停用涉事存储以防数据覆盖。探索回收站,检索近期删除。备份是宝藏,搜寻云或外置硬盘。软件救星谨慎付费,试用验证。极端情况,专家服务可开盘恢复,代价高昂需权衡。
删除的视频怎样才能恢复?详尽指南
|
小程序 测试技术 程序员
『软件工程12』软件工程实践方法——软件测试
该文章详细阐述了软件测试的重要性和基本原则,并按测试阶段顺序介绍了单元测试、集成测试、确认测试以及系统测试的具体内容和实施步骤。
『软件工程12』软件工程实践方法——软件测试