算法刷题 -- 1823. 找出游戏的获胜者<难度 ★★☆>
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. 找出游戏的获胜者<难度 ★★☆>相关推荐
- LeetCode 937. 重新排列日志文件 / 1823. 找出游戏的获胜者(约瑟夫环问题) / 713. 乘积小于 K 的子数组
937. 重新排列日志文件 2022.5.3 每日一题 题目描述 给你一个日志数组 logs.每条日志都是以空格分隔的字串,其第一个字为字母与数字混合的 标识符 . 有两种不同类型的日志: 字母日志: ...
- 1823. 找出游戏的获胜者( 约瑟夫环问题 )
文章目录 Question Ideas 1.Answer( Java ) Code 2.Answer( Java ) Code 3.Answer( Java ) Code Question 1823. ...
- 约瑟夫环——递推公式详解(leetcode 1823. 找出游戏的获胜者)
约瑟夫环--递推公式详解(leetcode 1823. 找出游戏的获胜者) 约瑟夫环问题 约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知 n 个人(以编号1,2,3-n分别表示)围坐在一张圆桌周围. ...
- LeetCode 1823. 找出游戏的获胜者
LeetCode 1823. 找出游戏的获胜者 文章目录 LeetCode 1823. 找出游戏的获胜者 题目描述 一.解题关键词 二.解题报告 1.思路分析 2.时间复杂度 3.代码示例 2.知识点 ...
- golang力扣leetcode 1823.找出游戏的获胜者
1823.找出游戏的获胜者 1823.找出游戏的获胜者 题解 代码 1823.找出游戏的获胜者 1823.找出游戏的获胜者 题解 题目:n个位围成一个环,每次删除第k个人,求最后一个人是谁 思路:约瑟 ...
- 0504|1823. 找出游戏的获胜者
0504|1823. 找出游戏的获胜者 这道题使用队列也可以. 遍历 quene 时,从队尾拿出一个成员,然后再从对头插入.如此循环. 这里使用的是链表: var findTheWinner = fu ...
- 约瑟夫环问题- leetcode 1823. 找出游戏的获胜者
1823. 找出游戏的获胜者 使用链表模拟 class Solution {// 模拟public int findTheWinner(int n, int k) { List<Integer& ...
- 1823. 找出游戏的获胜者
1823. 找出游戏的获胜者 思路: 用向量存储成员编号 进入循环,只剩一位成员时,break 根据题意每次移除一个人 上一次的坐标加上每次移动个数减去1(上一次结束时的下一个坐标是这一次的开始)模剩 ...
- 每日一道leetcode(python)1823. 找出游戏的获胜者
每日一道leetcode(python)1823. 找出游戏的获胜者 2021-08-07 共有 n 名小伙伴一起做游戏.小伙伴们围成一圈,按 顺时针顺序 从 1 到 n 编号.确切地说,从第 i 名 ...
最新文章
- ASP.NET中绑定枚举类型
- Raspberry pi 蓝牙音响播放
- emWin 2天速成实例教程002_多个页面窗口切换
- git 一口气带你走完git之旅
- 表格序号_如何让表格序号自动更新,四个函数让表格实现自动化、高效操作
- Android 最新左右可见上下页的banner实现demo
- Linux c 进程名 pid,Linux C已知进程名字得到其PID号
- av_seek_frame() 定位为什么不准呢?
- 持续集成部署Jenkins工作笔记0009---创建SVN版本库并提交Maven工程
- Kafka到Hdfs的数据Pipeline整理
- 【历史上的今天】8 月 29 日:Wolfram 语言之父、“新”科学家 Stephen Wolfram 的诞生
- 使用PYTHON采集船舶MMSI数据
- 读书06《简约至上》
- linux下cuda cudnn安装 没有权限的安装
- 儿童的31个“敏感期”特点及建议(转载)
- Docker拉取Solace pubsub+镜像timeout的问题
- 什么是域名解析?如何设置域名解析?
- Java的热门应用有哪些
- 常见文件mime类型
- 计算正方体、圆柱体的表面积、体积
热门文章
- 生成式语言大模型压缩技术思考——以ChatGPT为例
- 【图像识别】【读论文】纸币图像特征提取和识别问题
- EF中的上下文(DbContext)简介
- 创业过程中的63个技术问题
- 迁移mysql数据库报错_数据库迁移失败报错
- 天龙固件U盘更新_2020年的无线音响好用不?用HEOS体验天龙HOME250
- 【OpenHarmony】napi基础知识学习
- Mastering the game of Go with deep neural networks and tree search翻译
- svn客户端在服务器创建项目,win7下安装svn服务器端及客户端详细步骤
- js通过身份证号获取出生日期,性别,年龄