Skip to content

Commit 7fd6a3a

Browse files
committed
870
1 parent 2c41fca commit 7fd6a3a

File tree

2 files changed

+18
-47
lines changed

2 files changed

+18
-47
lines changed

leetcode/870. Advantage Shuffle/README.md

+18-17
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@
3333
</div>
3434

3535

36+
**Related Topics**:
37+
[Array](https://leetcode.com/tag/array/), [Greedy](https://leetcode.com/tag/greedy/)
38+
3639
## Solution 1.
3740

3841
```cpp
@@ -43,24 +46,22 @@
4346
class Solution {
4447
public:
4548
vector<int> advantageCount(vector<int>& A, vector<int>& B) {
46-
sort(A.begin(), A.end());
47-
vector<int> copy(B.begin(), B.end());
48-
sort(B.begin(), B.end());
49-
unordered_map<int, queue<int>> m;
50-
queue<int> leftover;
51-
int i = 0;
52-
for (int a : A) {
53-
if (a > B[i]) m[B[i++]].push(a);
54-
else leftover.push(a);
49+
int N = A.size(), i = 0;
50+
vector<int> ia(N), ib(N), ans(N, -1);
51+
iota(begin(ia), end(ia), 0);
52+
iota(begin(ib), end(ib), 0);
53+
sort(begin(ia), end(ia), [&](int a, int b) { return A[a] > A[b]; });
54+
sort(begin(ib), end(ib), [&](int a, int b) { return B[a] > B[b]; });
55+
for (int j = 0; i < N && j < N; ++i) {
56+
while (j < N && B[ib[j]] >= A[ia[i]]) ++j;
57+
if (j < N) {
58+
ans[ib[j++]] = A[ia[i]];
59+
} else break;
5560
}
56-
vector<int> ans;
57-
for (int b : copy) {
58-
if (m[b].size()) {
59-
ans.push_back(m[b].front());
60-
m[b].pop();
61-
} else {
62-
ans.push_back(leftover.front());
63-
leftover.pop();
61+
for (int j = 0; i < N && j < N; ++i) {
62+
while (j < N && ans[j] != -1) ++j;
63+
if (j < N) {
64+
ans[j++] = A[ia[i]];
6465
}
6566
}
6667
return ans;

leetcode/870. Advantage Shuffle/s1.cpp

-30
This file was deleted.

0 commit comments

Comments
 (0)