曾经一次笔试,由于准备不足,前面所有题都打完了,但是最后一题,就是手写约瑟夫环,我居然没有写出来,然后。。凉凉了。。
现在再来回顾一下:
问题:有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人?
package com; import java.util.ArrayList; import java.util.List; public class Main { public static int LastRemaining_Solution(int n, int m) { if(n == 0 || m == 0){ return -1; } List list = new ArrayList(); for(int i=1;i<=n;i++){ list.add(i); } int i=0; for(int j = 1;j< n;j++){ //每次循环时,求得将要退出的人在集合中的下标 i = (i + m -1) % list.size(); //将集合中代表该人的元素删除 list.remove(i); } System.out.println(list); int result = Integer.valueOf(list.get(0).toString()); return result; } public static void main(String [] args){ int [] arr = {1,2,3,4,5}; int list = LastRemaining_Solution(100,7); System.out.println(list); } }最关键的部分在于:最关键的部分在于index = (index+length-1) % length。