思路:
模拟一下操作的行为,由于操作的最后,得到的数组是有序的,根据规则:
索引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;
}