1、力扣原题

https://leetcode-cn.com/problems/find-the-winner-of-the-circular-game/

其实也是约瑟夫环的问题,本来想用单向循环链表,不过看了下解题,感觉递归还是更适合。

  • 思路分析
    n个人,间距为k:
    定义:从1到n编号每k个淘汰一个,游戏结束时的幸存者编号为f(n, k)。

在n个人中首先淘汰的必然是第k号,其最终幸存者,就是剩余n-1个人继续游戏的最终幸存者
而剩余n-1个人将以第(k+1)号作为游戏的起点(这是一句废话!)
若以第(k+1)号作为第1号,剩余n-1个人在新的编号规则下的幸存者就是f(n-1, k)(递归函数定义)

现已知,剩余n-1个人在新的编号规则下的幸存者编号是f(n-1, k),
这个编号就是已知的,因为这是递归!是递归!递归!怎么算的交给f(n-1, k)的内部递归过程,此处就是任性直接用!

接下来就是怎么把新的编号规则下的确定编号f(n-1, k),转换为原来1~n编号规则下的编号
新编号规则下的1号是原来的k+1号,新编号规则的2号是原来的k+2号,…,新编号规则下的n-k号是原来的n号,新编号规则下的n-k+1号是原来的1号,… …
因此,新编号规则下的编号加上k即为原来的编号,若加上k之后超过了N说明超过了原始编号规则中的最后一个(又从1开始了),直接减去n即可,即f(n, k) = f(n-1, k) + k(若其超过n则需减去n)。

class Solution {public int findTheWinner(int n, int k) {if (n == 1) {return 1;}int lastPeople = findTheWinner(n - 1, k) + k;int result = lastPeople % n;if (result == 0) {return n;} else {return result;}}
}

算法刷题 -- 1823. 找出游戏的获胜者<难度 ★★☆>相关推荐

  1. LeetCode 937. 重新排列日志文件 / 1823. 找出游戏的获胜者(约瑟夫环问题) / 713. 乘积小于 K 的子数组

    937. 重新排列日志文件 2022.5.3 每日一题 题目描述 给你一个日志数组 logs.每条日志都是以空格分隔的字串,其第一个字为字母与数字混合的 标识符 . 有两种不同类型的日志: 字母日志: ...

  2. 1823. 找出游戏的获胜者( 约瑟夫环问题 )

    文章目录 Question Ideas 1.Answer( Java ) Code 2.Answer( Java ) Code 3.Answer( Java ) Code Question 1823. ...

  3. 约瑟夫环——递推公式详解(leetcode 1823. 找出游戏的获胜者)

    约瑟夫环--递推公式详解(leetcode 1823. 找出游戏的获胜者) 约瑟夫环问题 约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知 n 个人(以编号1,2,3-n分别表示)围坐在一张圆桌周围. ...

  4. LeetCode 1823. 找出游戏的获胜者

    LeetCode 1823. 找出游戏的获胜者 文章目录 LeetCode 1823. 找出游戏的获胜者 题目描述 一.解题关键词 二.解题报告 1.思路分析 2.时间复杂度 3.代码示例 2.知识点 ...

  5. golang力扣leetcode 1823.找出游戏的获胜者

    1823.找出游戏的获胜者 1823.找出游戏的获胜者 题解 代码 1823.找出游戏的获胜者 1823.找出游戏的获胜者 题解 题目:n个位围成一个环,每次删除第k个人,求最后一个人是谁 思路:约瑟 ...

  6. 0504|1823. 找出游戏的获胜者

    0504|1823. 找出游戏的获胜者 这道题使用队列也可以. 遍历 quene 时,从队尾拿出一个成员,然后再从对头插入.如此循环. 这里使用的是链表: var findTheWinner = fu ...

  7. 约瑟夫环问题- leetcode 1823. 找出游戏的获胜者

    1823. 找出游戏的获胜者 使用链表模拟 class Solution {// 模拟public int findTheWinner(int n, int k) { List<Integer& ...

  8. 1823. 找出游戏的获胜者

    1823. 找出游戏的获胜者 思路: 用向量存储成员编号 进入循环,只剩一位成员时,break 根据题意每次移除一个人 上一次的坐标加上每次移动个数减去1(上一次结束时的下一个坐标是这一次的开始)模剩 ...

  9. 每日一道leetcode(python)1823. 找出游戏的获胜者

    每日一道leetcode(python)1823. 找出游戏的获胜者 2021-08-07 共有 n 名小伙伴一起做游戏.小伙伴们围成一圈,按 顺时针顺序 从 1 到 n 编号.确切地说,从第 i 名 ...

最新文章

  1. ASP.NET中绑定枚举类型
  2. Raspberry pi 蓝牙音响播放
  3. emWin 2天速成实例教程002_多个页面窗口切换
  4. git 一口气带你走完git之旅
  5. 表格序号_如何让表格序号自动更新,四个函数让表格实现自动化、高效操作
  6. Android 最新左右可见上下页的banner实现demo
  7. Linux c 进程名 pid,Linux C已知进程名字得到其PID号
  8. av_seek_frame() 定位为什么不准呢?
  9. 持续集成部署Jenkins工作笔记0009---创建SVN版本库并提交Maven工程
  10. Kafka到Hdfs的数据Pipeline整理
  11. 【历史上的今天】8 月 29 日:Wolfram 语言之父、“新”科学家 Stephen Wolfram 的诞生
  12. 使用PYTHON采集船舶MMSI数据
  13. 读书06《简约至上》
  14. linux下cuda cudnn安装 没有权限的安装
  15. 儿童的31个“敏感期”特点及建议(转载)
  16. Docker拉取Solace pubsub+镜像timeout的问题
  17. 什么是域名解析?如何设置域名解析?
  18. Java的热门应用有哪些
  19. 常见文件mime类型
  20. 计算正方体、圆柱体的表面积、体积

热门文章

  1. 生成式语言大模型压缩技术思考——以ChatGPT为例
  2. 【图像识别】【读论文】纸币图像特征提取和识别问题
  3. EF中的上下文(DbContext)简介
  4. 创业过程中的63个技术问题
  5. 迁移mysql数据库报错_数据库迁移失败报错
  6. 天龙固件U盘更新_2020年的无线音响好用不?用HEOS体验天龙HOME250
  7. 【OpenHarmony】napi基础知识学习
  8. Mastering the game of Go with deep neural networks and tree search翻译
  9. svn客户端在服务器创建项目,win7下安装svn服务器端及客户端详细步骤
  10. js通过身份证号获取出生日期,性别,年龄