剑指offer系列52---约瑟夫环问题

Posted noaman_wgs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer系列52---约瑟夫环问题相关的知识,希望对你有一定的参考价值。

【题目】0,1,。。。n排成一个圈,从0开始每次删除第m个数,求圆圈最后个数。
* 【思路】1 用数组模拟圆圈。当数到最后一个数即index==n时,令index==0 重头开始遍历;
* 当遇到已经被删除的数时nums[index]==-1,跳过继续;
* 当走到指定m个数的时候,就将其删除掉,nums[index]=-1;

 1 package com.exe10.offer;
 2 
 3 /**
 4  * 【题目】0,1,。。。n排成一个圈,从0开始每次删除第m个数,求圆圈最后个数。
 5  * 【思路】1 用数组模拟圆圈。当数到最后一个数即index==n时,令index==0 重头开始遍历;
 6  *                           当遇到已经被删除的数时nums[index]==-1,跳过继续;
 7  *                          当走到指定m个数的时候,就将其删除掉,nums[index]=-1;
 8  * @author WGS
 9  *
10  */
11 public class LastNumberInCircle {
12 
13     public int lastRemainInCircle(int n,int m){
14         if(m<1 || n<1) return -1;
15         int[] nums=new int[n];
16         int indexInNums=-1;
17         int count=0;//计步器
18         int length=n;
19         while(length>0){
20             indexInNums++;
21             //1
22             if(indexInNums==n)
23                 indexInNums=0;
24             //2
25             if(nums[indexInNums]==-1)
26                 continue;
27             count++;//计步器++;
28             //3
29             if(count==m){
30                 nums[indexInNums]=-1;
31                 count=0;
32                 length--;
33             }                    
34         }
35         return indexInNums;
36         
37     }
38     
39     
40     public static void main(String[] args) {
41         int l = new LastNumberInCircle().lastRemainInCircle(5, 3);
42         System.out.println(l);
43     }
44 
45 }

 

以上是关于剑指offer系列52---约瑟夫环问题的主要内容,如果未能解决你的问题,请参考以下文章

剑指Offer45 约瑟夫环

剑指 Offer 62. 圆圈中最后剩下的数字-约瑟夫环

剑指 Offer 62. 圆圈中最后剩下的数字思路推导(约瑟夫环DP递归)

剑指 Offer 62. 圆圈中最后剩下的数字思路推导(约瑟夫环DP递归)

LeetCode 725. 分隔链表 / 326. 3的幂 / 剑指 Offer 62. 圆圈中最后剩下的数字(约瑟夫环问题)

剑指 Offer 62. 圆圈中最后剩下的数字(约瑟夫环,数学推导,动态规划)