/****************************************************************************************
*题目:圆圈中最后剩下的数字
* 0,1,。。。,n-1这个n数字排成一个圆圈,从数字0开始每次冲这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。
*时间:2015年10月6日15:27:33
*文件:LastNumberInCircle.java
*作者:cutter_point
****************************************************************************************/
package bishi.Offer50.y2015.m10.d06;
import java.util.*;
import org.junit.Test;
public class LastNumberInCircle
{
private void printList(List l)
{
if(l == null)
return;
System.out.print("[");
for(int i = 0; i < l.size(); ++i)
{
System.out.print(l.get(i) + ", ");
}//for
System.out.print("]");
}
public int lastRemaining(int n, int m)
{
if(n < 1 || m < 1)
return -1;
int i = 0;
List<Integer> numbers = new LinkedList<Integer>();
//初始化
for(i = 0; i <n; ++i)
{
numbers.add(i);
}//for
int current = 0; //指向当前遍历到的位置
while(numbers.size() > 1)
{
for(i = 1; i < m; ++i)
{
++current;
if(current == numbers.size())
{
//遍历下标超过了末尾
current = 0;
}//if
}//for
//数到了这个位置,删除掉
System.out.print("删除数组");
printList(numbers);
System.out.println("中的:" + numbers.get(current));
numbers.remove(current);
if(current == numbers.size())
current = 0;
}//while
return numbers.get(current);
}
@Test
public void test()
{
LastNumberInCircle l = new LastNumberInCircle();
int k = l.lastRemaining(5, 3);
System.out.println(k);
}
}
【笔试】53、圆圈中最后剩下的数字(约瑟夫环)
最新推荐文章于 2021-04-01 15:15:43 发布