-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path1561_javascript.js
52 lines (40 loc) · 1.51 KB
/
1561_javascript.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// 有 3n 堆数目不一的硬币,你和你的朋友们打算按以下方式分硬币:
// 每一轮中,你将会选出 任意 3 堆硬币(不一定连续)。
// Alice 将会取走硬币数量最多的那一堆。
// 你将会取走硬币数量第二多的那一堆。
// Bob 将会取走最后一堆。
// 重复这个过程,直到没有更多硬币。
// 给你一个整数数组 piles ,其中 piles[i] 是第 i 堆中硬币的数目。
// 返回你可以获得的最大硬币数目。
//
// 示例 1:
// 输入:piles = [2,4,1,2,7,8]
// 输出:9
// 解释:选出 (2, 7, 8) ,Alice 取走 8 枚硬币的那堆,你取走 7 枚硬币的那堆,Bob 取走最后一堆。
// 选出 (1, 2, 4) , Alice 取走 4 枚硬币的那堆,你取走 2 枚硬币的那堆,Bob 取走最后一堆。
// 你可以获得的最大硬币数目:7 + 2 = 9.
// 考虑另外一种情况,如果选出的是 (1, 2, 8) 和 (2, 4, 7) ,你就只能得到 2 + 4 = 6 枚硬币,这不是最优解。
// 示例 2:
// 输入:piles = [2,4,5]
// 输出:4
// 示例 3:
// 输入:piles = [9,8,7,6,5,1,2,3,4]
// 输出:18
// 每次三堆 alice取最多的那堆 bob取在所有硬币中最少的那堆
// 实际就是数组排序后只取中间的那一份
/**
* @param {number[]} piles
* @return {number}
*/
var maxCoins = function(piles) {
piles.sort((a,b)=>{
return a-b
})
let res = 0,index = piles.length -2
for(let i=0;i < piles.length / 3 ;i++){
res += piles[index];
index = index -2
}
return res;
};