剑指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---约瑟夫环问题的主要内容,如果未能解决你的问题,请参考以下文章
剑指 Offer 62. 圆圈中最后剩下的数字思路推导(约瑟夫环DP递归)
剑指 Offer 62. 圆圈中最后剩下的数字思路推导(约瑟夫环DP递归)
LeetCode 725. 分隔链表 / 326. 3的幂 / 剑指 Offer 62. 圆圈中最后剩下的数字(约瑟夫环问题)