LeetCode:排序顺序问题

问题:手里面有1到n排序的纸牌,按照从上到下排列,现在对它进行如下操作:将第一张放到桌子上,再取一张放到纸牌堆底,这样循环操作,直到手里面没纸牌为止;那么假设桌子上的顺序是1到n,那么手上的牌原始排序是?


package acm;

import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import org.junit.Test;
/**
*类描述:排序问题
*@author: 张宇
*@date: 日期: 2018年9月10日 时间: 上午10:23:55
*@version 1.0
 */
public class Test1toN {

	@Test
	public void fun() {
		Scanner input=new Scanner(System.in);
		System.out.println("请输出n的值:");
		int n=input.nextInt();
		// 创建两个链表
		List<Integer> list = new LinkedList<>();
		
		// 一个链表里面存储1-n
		for (int i = 1; i <= n; i++) {
			list.add(i);
		}
		
		List<Integer> newList = getNewList(list);
		// System.out.println(newList);
		// 然后根据题目找到k,v之间的映射
		Map<Integer, Integer> map = new HashMap<>();
		int newIndex = 1;
		for (Integer integer : newList) {
			map.put(integer, newIndex++);
		}
		System.out.println(map.values().toString());
	}

	// 获取要求之后的链表
	private List<Integer> getNewList(List<Integer> list) {
		List<Integer> newList = new LinkedList<>();
		boolean flag = true;
		while (list.size() > 0) {
			if (flag) {
				newList.add(list.get(0));
				list.remove(0);
			} else {
				list.add(list.get(0));
				list.remove(0);
			}
			flag=!flag;
		}
		return newList;
	}
}

最后执行结果:

[1, 6, 2, 10, 3, 7, 4, 9, 5, 8]

猜你喜欢

转载自blog.csdn.net/zy345293721/article/details/82585979