leetcode950. Reveal Cards In Increasing Order

本文探讨了一种特殊的牌堆翻转算法,旨在通过特定的排序和队列操作,实现牌堆翻转后仍保持有序的目标。算法首先对牌进行排序,随后利用队列模拟抓牌放牌过程,确保每张牌按指定规则放置,最终实现牌堆的有序翻转。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值