约瑟夫环
来源:互联网 发布:html5编程软件 编辑:程序博客网 时间:2024/05/29 05:55
给一个长度为n的环,从编号为0的节点开始数,数到m-1时移除该节点,问最终剩下节点的编号
方法一:直接模拟链表移除
import java.util.LinkedList;import java.util.List;public class Solution {public int LastRemaining_Solution(int n, int m) { if(m==0)return -1 ; LinkedListlist = new LinkedList () ; for(int i = 0;i < n;i++){ list.add(i) ; } int pos = 0; for(int i = 0;i < n-1;i++){ int len = (n-i) ; pos = (pos+m-1)%len ; list.remove(pos) ; } return list.get(0) ; }}
对于长度为n的环,其第一个移除的节点为(m-1)%n点,
那么其下一个节点的编号为k=m%n,以其下一个节点开始的节点编号为
k,k+1,k+2....n-2,n-1,0,1....k-2
剩下的n-1个节点可以看成一个新的约瑟夫环,
0,1,2.......................n-2
设新的约瑟夫环中求得的最终结果为x,
可以很明显地可以看到x在原来的约瑟夫环中的坐标为(x+k)%n
可以得到递推公式为f(n)=(f(n-1)+m)%n
其中f(n)为n个约瑟夫环的值
public class Solution { public int LastRemaining_Solution(int n, int m) { if(m==0)return -1 ; if(n==0)return 0 ; return (LastRemaining_Solution(n-1,m)+m)%n ; }}
0 0
- 约瑟夫问题、约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 约瑟夫环
- 不同形状的头像
- js学习笔记:严格模式
- BZOJ 3672 [Noi2014]购票【点分+斜率优化
- 在Fragment中webView的回退问题
- 系统开发奥若拉模式
- 约瑟夫环
- REDIS 进阶(12) redis分片
- Caffe使用教程【转】
- 近五年来133个Java 面试问题及列表
- okhttp3 http 重定向到 https
- qt应用程序的交叉编译和移植
- cvFindfundamental调用格式
- 关于缓存雪崩和缓存穿透等问题
- Fel轻量高效的表达式计算引擎