1561. 你可以获得的最大硬币数目
示例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
思路
题意:三个人取数值,求每次取第二大的数值所构成的最大值。
方法:从小到大排序,最小的前三分之一给Bob,剩余部分每次Alice拿最大,我拿第二大。
如[9,8,7,6,5,1,2,3,4],排序后为[1,2,3,4,5,6,7,8,9]。[1,2,3]给Bob,[4,5,6,7,8,9]Alice取[9,7,5],我取[8,6,4]。
代码
class Solution {
public int maxCoins(int[] piles) {
int result = 0;
Arrays.sort(piles);
for (int i = piles.length - 2; i >= piles.length / 3; i-=2)
result += piles[i];
return result;
}
}