leetcode950. Reveal Cards In Increasing Order

题目链接
题目大意:桌子上有一副牌(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;
    }
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值