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

简介: golang力扣leetcode 1823.找出游戏的获胜者

1823.找出游戏的获胜者

1823.找出游戏的获胜者

题解

题目:n个位围成一个环,每次删除第k个人,求最后一个人是谁

思路:约瑟夫环

1.在最后一轮中,只剩一个人,下标pos1=(0+k)%1
2.该人既然是最后一个人,说明他在每一轮都是安全的
3.倒数第二轮:pos2=(pos1+k)%2
4.倒数第三轮:pos3=(pos2+k)%3
5.倒数第n轮:posN=(pos[N-1]+k)%n
6.得到递推公式,posN=(pos[N-1]+k) % n
7.已知 pos1=(0+k) % 1 = 0,依次计算pos2,pos3...即可
posN=(pos[N-1]+k) % n
1.既然递推公式出来了,也可以递归

代码

func findTheWinner(n int, k int) int {
  pos := 0
  for i := 2; i <= n; i++ {
    pos = (pos + k) % i
  }
  return pos + 1
}
func findTheWinner(n int, k int) int {
  if n == 1 {
    return 1
  }
  return (findTheWinner(n-1, k)-1+k)%n + 1
}
目录
相关文章
|
2月前
LeetCode题:174. 地下城游戏
LeetCode题:174. 地下城游戏
37 0
LeetCode题:174. 地下城游戏
|
12天前
|
算法
【力扣】55.跳跃游戏
【力扣】55.跳跃游戏
|
3月前
|
Shell 机器学习/深度学习 Linux
Linux 终端操作命令(2)内部命令
Linux 终端操作命令(2)内部命令
21 0
Linux 终端操作命令(2)内部命令
|
3月前
|
Java 容器 程序员
Java语言程序设计试卷6套
Java语言程序设计试卷6套
127 0
Java语言程序设计试卷6套
|
3月前
|
算法 Java Go
Golang每日一练(leetDay0098) 生命、Nim、猜数字游戏
Golang每日一练(leetDay0098) 生命、Nim、猜数字游戏
28 0
Golang每日一练(leetDay0098) 生命、Nim、猜数字游戏
|
3月前
|
Go 容器 SQL
【Golang Leetcode】总目录(Day1~100)
【Golang Leetcode】总目录(Day1~100)
475 1
【Golang Leetcode】总目录(Day1~100)
|
3月前
leetcode:292. Nim 游戏(数学推理)
leetcode:292. Nim 游戏(数学推理)
18 0
|
3月前
|
算法 Java 测试技术
[Java·算法·中等] LeetCode 45. 跳跃游戏 II 详细解读
[Java·算法·中等] LeetCode 45. 跳跃游戏 II 详细解读
28 0
|
3月前
leetcode-529:扫雷游戏
leetcode-529:扫雷游戏
21 0
|
3月前
|
存储
leetcode-289:生命游戏
leetcode-289:生命游戏
24 0

热门文章

最新文章