zoukankan      html  css  js  c++  java
  • leetcode《按递增顺序显示卡牌》

    题目描述:

    牌组中的每张卡牌都对应有一个唯一的整数。你可以按你想要的顺序对这套卡片进行排序。
    
    最初,这些卡牌在牌组里是正面朝下的(即,未显示状态)。
    
    现在,重复执行以下步骤,直到显示所有卡牌为止:
    
    从牌组顶部抽一张牌,显示它,然后将其从牌组中移出。
    如果牌组中仍有牌,则将下一张处于牌组顶部的牌放在牌组的底部。
    如果仍有未显示的牌,那么返回步骤 1。否则,停止行动。
    返回能以递增顺序显示卡牌的牌组顺序。
    
    答案中的第一张牌被认为处于牌堆顶部。

    示例:

    输入:[17,13,11,2,3,5,7]
    输出:[2,13,3,11,5,17,7]
    解释:
    我们得到的牌组顺序为 [17,13,11,2,3,5,7](这个顺序不重要),然后将其重新排序。
    重新排序后,牌组以 [2,13,3,11,5,17,7] 开始,其中 2 位于牌组的顶部。
    我们显示 2,然后将 13 移到底部。牌组现在是 [3,11,5,17,7,13]。
    我们显示 3,并将 11 移到底部。牌组现在是 [5,17,7,13,11]。
    我们显示 5,然后将 17 移到底部。牌组现在是 [7,13,11,17]。
    我们显示 7,并将 13 移到底部。牌组现在是 [11,17,13]。
    我们显示 11,然后将 17 移到底部。牌组现在是 [13,17]。
    我们展示 13,然后将 17 移到底部。牌组现在是 [17]。
    我们显示 17。
    由于所有卡片都是按递增顺序排列显示的,所以答案是正确的。

    Java代码实现:

    (解题思路:从实例的解释从最后往前看,更容易发现方法。将数据从小到大排序,使用双端队列从最大的数据开始,依次将数据存入队首时,且将队列最后一个元素放到队首)

        public int[] deckRevealedIncreasing(int[] deck) {
            List<Integer> list = new ArrayList<Integer>();
            for (int i = 0; i < deck.length; i++) {
                list.add(deck[i]);
            }
            // 从小到大排序
            list = list.stream().sorted().collect(Collectors.toList());
    
            // Deque 双端队列
            Deque<Integer> deque = new LinkedList<Integer>();
            System.out.println("将队列最后一个元素放到队首");
            for (int i = list.size() - 1; i >= 0; i--) {
                deque.addFirst(list.get(i));
                int last = deque.getLast();
                Arrays.stream(deque.toArray()).forEach(d -> System.out.print(d + ", "));
                System.out.print("--> ");
                if (i == 0) {
                    break;
                }
                deque.pollLast();
                deque.addFirst(last);
                Arrays.stream(deque.toArray()).forEach(d -> System.out.print(d + ", "));
                System.out.println();
    
            }
            Object[] objects = deque.toArray();
            int[] result = new int[objects.length];
            for (int i = 0; i < objects.length; i++) {
                result[i] = (int) objects[i];
            }
            return result;
        }

  • 相关阅读:
    《C# to IL》第一章 IL入门
    multiple users to one ec2 instance setup
    Route53 health check与 Cloudwatch alarm 没法绑定
    rsync aws ec2 pem
    通过jvm 查看死锁
    wait, notify 使用清晰讲解
    for aws associate exam
    docker 容器不能联网
    本地运行aws lambda credential 配置 (missing credential config error)
    Cannot connect to the Docker daemon. Is 'docker daemon' running on this host?
  • 原文地址:https://www.cnblogs.com/miaoying/p/10491481.html
Copyright © 2011-2022 走看看