leetcode950_按递增顺序显示卡牌

 

思路:

模拟一下操作的行为,由于操作的最后,得到的数组是有序的,根据规则:

索引0对应最小的卡片,索引2对应第二最小的卡片,索引4对应第三最小的卡片,等等

用双向队列模拟行为 ,对原数组进行排序,即为最终结果,利用队列保存索引【0,1,2,3…】,第一个索引对应数组最小的数,

第二个索引移动到最后,第三个索引对应第二小的数,第四个索引再次移动到后面……继续操作,直到所有的数字都找到对应的索引。

    public int[] deckRevealedIncreasing(int[] deck) {
		int N = deck.length;
		LinkedList<Integer> queue = new LinkedList();//存索引
		for (int i = 0; i < N; ++i)
			queue.add(i);

		int[] res = new int[N];
		Arrays.sort(deck);          //此时card排好序了
		for (int card : deck) {
			res[queue.pollFirst()] = card;
			if (!queue.isEmpty())
				queue.addLast(queue.pollFirst());  //把第一个索引添加到最后
		}
		return res;
	}

 

点赞