Skip to content

Commit 42e7f87

Browse files
committed
feat: add solutions to lc problem: No.0950
No.0950.Reveal Cards In Increasing Order
1 parent 1e5e46a commit 42e7f87

File tree

6 files changed

+178
-26
lines changed

6 files changed

+178
-26
lines changed

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

Lines changed: 71 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,22 +55,92 @@
5555

5656
<!-- 这里可写通用的实现逻辑 -->
5757

58+
**方法一:队列模拟**
59+
60+
根据题目描述,我们知道,数组 `deck` 逆序排列后的序列就是最终的结果。我们可以从最终结果入手,逆向推导出卡片顺序。
61+
62+
遍历逆序排列后的数组 `deck`,先判断队列是否为空,若不为空,则将队尾元素移动到队首,然后将当前元素入队(题目中的逆过程)。若为空,则直接将当前元素入队。
63+
64+
最后,将队列中的元素依次出队,即可得到最终的结果。
65+
66+
时间复杂度 $O(n\log n)$,空间复杂度 $O(n)$。其中 $n$ 为数组 `deck` 的长度。
67+
5868
<!-- tabs:start -->
5969

6070
### **Python3**
6171

6272
<!-- 这里可写当前语言的特殊实现逻辑 -->
6373

6474
```python
65-
75+
class Solution:
76+
def deckRevealedIncreasing(self, deck: List[int]) -> List[int]:
77+
q = deque()
78+
for v in sorted(deck, reverse=True):
79+
if q:
80+
q.appendleft(q.pop())
81+
q.appendleft(v)
82+
return list(q)
6683
```
6784

6885
### **Java**
6986

7087
<!-- 这里可写当前语言的特殊实现逻辑 -->
7188

7289
```java
90+
class Solution {
91+
public int[] deckRevealedIncreasing(int[] deck) {
92+
Deque<Integer> q = new ArrayDeque<>();
93+
Arrays.sort(deck);
94+
int n = deck.length;
95+
for (int i = n - 1; i >= 0; --i) {
96+
if (!q.isEmpty()) {
97+
q.offerFirst(q.pollLast());
98+
}
99+
q.offerFirst(deck[i]);
100+
}
101+
int[] ans = new int[n];
102+
for (int i = n - 1; i >= 0; --i) {
103+
ans[i] = q.pollLast();
104+
}
105+
return ans;
106+
}
107+
}
108+
```
109+
110+
### **C++**
111+
112+
```cpp
113+
class Solution {
114+
public:
115+
vector<int> deckRevealedIncreasing(vector<int>& deck) {
116+
sort(deck.rbegin(), deck.rend());
117+
deque<int> q;
118+
for (int v : deck) {
119+
if (!q.empty()) {
120+
q.push_front(q.back());
121+
q.pop_back();
122+
}
123+
q.push_front(v);
124+
}
125+
return vector<int>(q.begin(), q.end());
126+
}
127+
};
128+
```
73129
130+
### **Go**
131+
132+
```go
133+
func deckRevealedIncreasing(deck []int) []int {
134+
sort.Sort(sort.Reverse(sort.IntSlice(deck)))
135+
q := []int{}
136+
for _, v := range deck {
137+
if len(q) > 0 {
138+
q = append([]int{q[len(q)-1]}, q[:len(q)-1]...)
139+
}
140+
q = append([]int{v}, q...)
141+
}
142+
return q
143+
}
74144
```
75145

76146
### **...**

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

Lines changed: 61 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,73 @@ Since all the cards revealed are in increasing order, the answer is correct.
6262
### **Python3**
6363

6464
```python
65-
65+
class Solution:
66+
def deckRevealedIncreasing(self, deck: List[int]) -> List[int]:
67+
q = deque()
68+
for v in sorted(deck, reverse=True):
69+
if q:
70+
q.appendleft(q.pop())
71+
q.appendleft(v)
72+
return list(q)
6673
```
6774

6875
### **Java**
6976

7077
```java
78+
class Solution {
79+
public int[] deckRevealedIncreasing(int[] deck) {
80+
Deque<Integer> q = new ArrayDeque<>();
81+
Arrays.sort(deck);
82+
int n = deck.length;
83+
for (int i = n - 1; i >= 0; --i) {
84+
if (!q.isEmpty()) {
85+
q.offerFirst(q.pollLast());
86+
}
87+
q.offerFirst(deck[i]);
88+
}
89+
int[] ans = new int[n];
90+
for (int i = n - 1; i >= 0; --i) {
91+
ans[i] = q.pollLast();
92+
}
93+
return ans;
94+
}
95+
}
96+
```
97+
98+
### **C++**
99+
100+
```cpp
101+
class Solution {
102+
public:
103+
vector<int> deckRevealedIncreasing(vector<int>& deck) {
104+
sort(deck.rbegin(), deck.rend());
105+
deque<int> q;
106+
for (int v : deck) {
107+
if (!q.empty()) {
108+
q.push_front(q.back());
109+
q.pop_back();
110+
}
111+
q.push_front(v);
112+
}
113+
return vector<int>(q.begin(), q.end());
114+
}
115+
};
116+
```
71117
118+
### **Go**
119+
120+
```go
121+
func deckRevealedIncreasing(deck []int) []int {
122+
sort.Sort(sort.Reverse(sort.IntSlice(deck)))
123+
q := []int{}
124+
for _, v := range deck {
125+
if len(q) > 0 {
126+
q = append([]int{q[len(q)-1]}, q[:len(q)-1]...)
127+
}
128+
q = append([]int{v}, q...)
129+
}
130+
return q
131+
}
72132
```
73133

74134
### **...**
Lines changed: 9 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,15 @@
11
class Solution {
22
public:
33
vector<int> deckRevealedIncreasing(vector<int>& deck) {
4-
if (deck.size() == 0)
5-
return {};
6-
7-
sort(deck.begin(), deck.end());
8-
int len = deck.size();
9-
10-
int flg = deck.at(0) - 1;
11-
vector<int> o(len, flg);
12-
13-
int i = 0, p = 0;
14-
for (;;) {
15-
o[p] = deck.at(i);
16-
17-
if (++i < len) {
18-
do {
19-
p = (p + 1) % len;
20-
} while (o.at(p) != flg);
21-
do {
22-
p = (p + 1) % len;
23-
} while (o.at(p) != flg);
24-
} else
25-
break;
4+
sort(deck.rbegin(), deck.rend());
5+
deque<int> q;
6+
for (int v : deck) {
7+
if (!q.empty()) {
8+
q.push_front(q.back());
9+
q.pop_back();
10+
}
11+
q.push_front(v);
2612
}
27-
28-
return o;
13+
return vector<int>(q.begin(), q.end());
2914
}
3015
};
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
func deckRevealedIncreasing(deck []int) []int {
2+
sort.Sort(sort.Reverse(sort.IntSlice(deck)))
3+
q := []int{}
4+
for _, v := range deck {
5+
if len(q) > 0 {
6+
q = append([]int{q[len(q)-1]}, q[:len(q)-1]...)
7+
}
8+
q = append([]int{v}, q...)
9+
}
10+
return q
11+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution {
2+
public int[] deckRevealedIncreasing(int[] deck) {
3+
Deque<Integer> q = new ArrayDeque<>();
4+
Arrays.sort(deck);
5+
int n = deck.length;
6+
for (int i = n - 1; i >= 0; --i) {
7+
if (!q.isEmpty()) {
8+
q.offerFirst(q.pollLast());
9+
}
10+
q.offerFirst(deck[i]);
11+
}
12+
int[] ans = new int[n];
13+
for (int i = n - 1; i >= 0; --i) {
14+
ans[i] = q.pollLast();
15+
}
16+
return ans;
17+
}
18+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
class Solution:
2+
def deckRevealedIncreasing(self, deck: List[int]) -> List[int]:
3+
q = deque()
4+
for v in sorted(deck, reverse=True):
5+
if q:
6+
q.appendleft(q.pop())
7+
q.appendleft(v)
8+
return list(q)

0 commit comments

Comments
 (0)