【题目】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 }
时间: 2024-11-08 17:05:39