题目链接
题目大意:桌子上有一副牌(a deck of cards),面朝下扣着,翻开第一张,然后拿走,并且把其后的一张牌放到这副牌的最下面,以此类推,直到把所有牌都翻开。求这副牌开始应该以什么顺序放,可以保证把所有牌翻开后,是有序的。
思路: 首先给牌排个序,第1、3、 5、 7……位置按照从小到大往上放就行,2468位置……就用队列来模拟一波,挺好理解,速度也可以 哈哈
示例:Example 1:
Input: [17,13,11,2,3,5,7]
Output: [2,13,3,11,5,17,7]
class Solution {
public int[] deckRevealedIncreasing(int[] deck) {
if(deck.length <= 1){
return deck;
}
Arrays.sort(deck);
//用队列来模拟抓牌放牌过程
Queue<String> queue = new LinkedList<String>();
int len = deck.length;
int ans[] = new int[len];
int j = 0;
int i = 0;
for(i = 0; i < len; i+=2){
ans[i] = deck[j];
if(i + 1 < len){
queue.offer(i+1+"");
}
j++;
}
if(i == len + 1){
queue.offer(queue.poll());
}
while(!queue.isEmpty()){
ans[Integer.valueOf(queue.poll())] = deck[j];
j++;
if(!queue.isEmpty()){
queue.offer(queue.poll());
}
}
return ans;
}
}