返回介绍

solution / 0900-0999 / 0950.Reveal Cards In Increasing Order / README_EN

发布于 2024-06-17 01:03:32 字数 4160 浏览 0 评论 0 收藏 0

950. Reveal Cards In Increasing Order

中文文档

Description

You are given an integer array deck. There is a deck of cards where every card has a unique integer. The integer on the ith card is deck[i].

You can order the deck in any order you want. Initially, all the cards start face down (unrevealed) in one deck.

You will do the following steps repeatedly until all cards are revealed:

  1. Take the top card of the deck, reveal it, and take it out of the deck.
  2. If there are still cards in the deck then put the next top card of the deck at the bottom of the deck.
  3. If there are still unrevealed cards, go back to step 1. Otherwise, stop.

Return _an ordering of the deck that would reveal the cards in increasing order_.

Note that the first entry in the answer is considered to be the top of the deck.

 

Example 1:

Input: deck = [17,13,11,2,3,5,7]
Output: [2,13,3,11,5,17,7]
Explanation: 
We get the deck in the order [17,13,11,2,3,5,7] (this order does not matter), and reorder it.
After reordering, the deck starts as [2,13,3,11,5,17,7], where 2 is the top of the deck.
We reveal 2, and move 13 to the bottom.  The deck is now [3,11,5,17,7,13].
We reveal 3, and move 11 to the bottom.  The deck is now [5,17,7,13,11].
We reveal 5, and move 17 to the bottom.  The deck is now [7,13,11,17].
We reveal 7, and move 13 to the bottom.  The deck is now [11,17,13].
We reveal 11, and move 17 to the bottom.  The deck is now [13,17].
We reveal 13, and move 17 to the bottom.  The deck is now [17].
We reveal 17.
Since all the cards revealed are in increasing order, the answer is correct.

Example 2:

Input: deck = [1,1000]
Output: [1,1000]

 

Constraints:

  • 1 <= deck.length <= 1000
  • 1 <= deck[i] <= 106
  • All the values of deck are unique.

Solutions

Solution 1

class Solution:
  def deckRevealedIncreasing(self, deck: List[int]) -> List[int]:
    q = deque()
    for v in sorted(deck, reverse=True):
      if q:
        q.appendleft(q.pop())
      q.appendleft(v)
    return list(q)
class Solution {
  public int[] deckRevealedIncreasing(int[] deck) {
    Deque<Integer> q = new ArrayDeque<>();
    Arrays.sort(deck);
    int n = deck.length;
    for (int i = n - 1; i >= 0; --i) {
      if (!q.isEmpty()) {
        q.offerFirst(q.pollLast());
      }
      q.offerFirst(deck[i]);
    }
    int[] ans = new int[n];
    for (int i = n - 1; i >= 0; --i) {
      ans[i] = q.pollLast();
    }
    return ans;
  }
}
class Solution {
public:
  vector<int> deckRevealedIncreasing(vector<int>& deck) {
    sort(deck.rbegin(), deck.rend());
    deque<int> q;
    for (int v : deck) {
      if (!q.empty()) {
        q.push_front(q.back());
        q.pop_back();
      }
      q.push_front(v);
    }
    return vector<int>(q.begin(), q.end());
  }
};
func deckRevealedIncreasing(deck []int) []int {
  sort.Sort(sort.Reverse(sort.IntSlice(deck)))
  q := []int{}
  for _, v := range deck {
    if len(q) > 0 {
      q = append([]int{q[len(q)-1]}, q[:len(q)-1]...)
    }
    q = append([]int{v}, q...)
  }
  return q
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文