剑指offer-面试题45-圆圈中最后剩下的数字

来源:互联网 发布:ubuntu 怎么卸载qq 编辑:程序博客网 时间:2024/05/16 04:32
package case45_LastNumberInCircle;import java.util.LinkedList;/** * 题目:0,1,...,n-1这n个数字排成1个圆圈,从数字0开始每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。 *  * @author WangSai * */public class LastNumberInCircle {public static void main(String[] args) {// TODO Auto-generated method stubint n = 40000;int m = 997;System.out.println(lastRemaining1(n, m));}/** * 方法1:利用环形链表 *  * @param n,数字的个数 * @param m,第m个数字 * @return 最后剩下的数字 */private static int lastRemaining1(int n, int m) {// 异常值检测if (n < 1 || m < 1) {return -1;}// 构建链表LinkedList<Integer> list = new LinkedList<Integer>();for (int i = 0; i < n; i++) {list.add(i);}// 当前数字在链表中的位置int index = 0;while (list.size() > 1) {// 移动m-1次,就可以到达第m个数for (int i = 1; i <= m - 1; i++) {index++;index %= list.size();}// 删除list.remove(index);if (index == list.size()) {index = 0;}}return list.get(0);}}

0 0
原创粉丝点击