Skip to content

Commit

Permalink
LC-1561 C++ JS TS accepted
Browse files Browse the repository at this point in the history
  • Loading branch information
davidyslu committed Aug 28, 2020
1 parent cd2c2df commit b9d7faa
Show file tree
Hide file tree
Showing 4 changed files with 115 additions and 0 deletions.
28 changes: 28 additions & 0 deletions LC-1561/LC-1561.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#include <vector>
#include <algorithm>

using namespace std;

class Solution {
public:
/**
* Concepts: Sorting
*/
int maxCoins(vector<int>& piles) {
int pilesLen = piles.size();
if (pilesLen < 3) return 0;

sort(piles.begin(), piles.end(), compare);

int result = 0;
for (int i = 1; i < 2 * pilesLen / 3; i += 2) {
result += piles[i];
}
return result;
}

private:
static bool compare(const int a, const int b) {
return a > b;
}
};
20 changes: 20 additions & 0 deletions LC-1561/LC-1561.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/**
* @param {number[]} piles
* @return {number}
*/
var maxCoins = function (piles) {
/**
* Concepts: Sorting
*/

let pilesLen = piles.length
if (pilesLen < 3) return 0

piles.sort((a, b) => b - a)

let result = 0
for (let i = 1; i < (2 * pilesLen) / 3; i += 2) {
result += piles[i]
}
return result
}
16 changes: 16 additions & 0 deletions LC-1561/LC-1561.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
/**
* Concepts: Sorting
*/

function maxCoins(piles: number[]): number {
let pilesLen: number = piles.length
if (pilesLen < 3) return 0

piles.sort((a, b) => b - a)

let result: number = 0
for (let i: number = 1; i < (2 * pilesLen) / 3; i += 2) {
result += piles[i]
}
return result
}
51 changes: 51 additions & 0 deletions LC-1561/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# LC-1561 - Maximum Number of Coins You Can Get

There are `3n` piles of coins of varying size, you and your friends will take piles of coins as follows:

* In each step, you will choose **any** 3 piles of coins (not necessarily consecutive).
* Of your choice, Alice will pick the pile with the maximum number of coins.
* You will pick the next pile with maximum number of coins.
* Your friend Bob will pick the last pile.
* Repeat until there are no more piles of coins.
* Given an array of integers `piles` where `piles[i]` is the number of coins in the `i`-th pile.

Return the maximum number of coins which you can have.

> * Difficulty: **MEDIUM**
---
## Examples

```
Input: piles = [2,4,1,2,7,8]
Output: 9
Explanation:
Choose the triplet (2, 7, 8), Alice Pick the pile with 8 coins, you the pile with 7 coins and Bob the last one.
Choose the triplet (1, 2, 4), Alice Pick the pile with 4 coins, you the pile with 2 coins and Bob the last one.
The maximum number of coins which you can have are: 7 + 2 = 9.
On the other hand if we choose this arrangement (1, 2, 8), (2, 4, 7) you only get 2 + 4 = 6 coins which is not optimal.
```

```
Input: piles = [2,4,5]
Output: 4
```

```
Input: piles = [9,8,7,6,5,1,2,3,4]
Output: 18
```

---
## Notes

* `3 <= piles.length <= 10^5`
* `piles.length % 3 == 0`
* `1 <= piles[i] <= 10^4`

---
## Solutions

1. Sorting
* Time complexity: $O(n\log{n})$
* Space complexity: $O(1)$

0 comments on commit b9d7faa

Please sign in to comment.