当前位置:网站首页>LeetCode. Sword finger offer 62 The last remaining number in the circle
LeetCode. Sword finger offer 62 The last remaining number in the circle
2022-07-07 01:45:00 【Stingy Wolf】
List of articles
Title Description
0,1,···,n-1 this n Number in a circle , From numbers 0 Start , Delete the... From this circle every time m A digital ( Delete and count from the next number ). Find the last number left in the circle .
for example ,0、1、2、3、4 this 5 Numbers make a circle , From numbers 0 Start deleting the 3 A digital , Before deleting 4 The numbers in turn are 2、0、4、1, So the last remaining number is 3.
Ideas
This is a famous mathematical problem —— Joseph ring .
The solution is directly posted here ( There is no strict mathematical proof , But it is easier to understand and remember )
Go back in time , Start with the last situation , Push back .
Borrow the picture of a big man :
- The last round ( It is called the n round ), There is only one number left ( be called
x
) when , The total size of the array is 1,x
The subscript of is 0 - n-1 In the round ,
x
Is safe , We draw the whole ring into an infinite straight line , It's easy to know , The starting point of this round , To x, Yes m Number , namely x There is m Number , And what is removed in this round is x The previous number . In this roundx
The subscript of is(m + 0) % 2
( stay x Fill the front with m Number ), Because of the ring , Let's take a model . This round is reserved 2 Number . - n-2 In the round , The first number of the last round was retained , explain n-1 There is m Number , And what is removed in this round is the number in front of this number . Then add m Number , be n-1 The subscript of all numbers in the wheel should be moved to the right m, So in this round
x
The subscript of is ,(((m + 0) % 2) + m) % 3
- …
- The first 1 round , Revert to the original state , We can work out
x
Subscript in initial round
class Solution {
public int lastRemaining(int n, int m) {
// The subscript of the last round
int x = 0;
for (int i = 2; i <= n; i++) {
x = (x + m) % i;
}
return x;
}
}
Formula for : f ( n , m ) = [ f ( n − 1 , m ) + m ] f(n,m) = [f(n-1,m) + m] % n f(n,m)=[f(n−1,m)+m], The boundary condition is f ( 1 , m ) = 0 f(1,m)=0 f(1,m)=0
Rigorous mathematical derivation , Reference resources : This is probably the most detailed mathematical derivation of Joseph ring you can find ! - You know
边栏推荐
- AcWing 1140. Shortest network (minimum spanning tree)
- WCF Foundation
- 【唯一】的“万字配图“ | 讲透【链式存储结构】是什么?
- Make Jar, Not War
- Instructions for using the domain analysis tool bloodhound
- Transplant DAC chip mcp4725 to nuc980
- 永久的摇篮
- Telnet,SSH1,SSH2,Telnet/SSL,Rlogin,Serial,TAPI,RAW
- Appium automation test foundation uiautomatorviewer positioning tool
- Dark horse notes - create immutable sets and streams
猜你喜欢
刨析《C语言》【进阶】付费知识【完结】
场景实践:基于函数计算快速搭建Wordpress博客系统
刨析《C语言》【进阶】付费知识【一】
New job insights ~ leave the old and welcome the new~
JS reverse -- ob confusion and accelerated music that poked the [hornet's nest]
Start from the bottom structure to learn the customization and testing of fpga---- FIFO IP
C语言关于链表的代码看不懂?一篇文章让你拿捏二级指针并深入理解函数参数列表中传参的多种形式
AI automatically generates annotation documents from code
设置Wordpress伪静态连接(无宝塔)
AcWing 1148. Secret milk transportation problem solution (minimum spanning tree)
随机推荐
Amway wave C2 tools
The cradle of eternity
鼠标右键 自定义
7.6 simulation summary
百度飞将BMN时序动作定位框架 | 数据准备与训练指南 (上)
Use nodejs to determine which projects are packaged + released
场景实践:基于函数计算快速搭建Wordpress博客系统
AcWing 1142. Busy urban problem solving (minimum spanning tree)
JS Es5 can also create constants?
json学习初体验–第三者jar包实现bean、List、map创json格式
DS-5/RVDS4.0变量初始化错误
WCF Foundation
刨析《C语言》【进阶】付费知识【一】
编译命令行终端 swift
Yunna - work order management system and process, work order management specification
AI 从代码中自动生成注释文档
Yunna | work order management measures, how to carry out work order management
HDU 4661 message passing (wood DP & amp; Combinatorics)
Basic introduction and use of dvajs
设置Wordpress伪静态连接(无宝塔)