1561. 你可以获得的最大硬币数目
解题思路
一,看完题目第一个想法就是需要对数组进行排序,之后取三等分,一次就是最小堆,中间堆,最大堆,取中间堆。结果发现并不是最优解。关键点在于,你取走的硬币堆可以是最大堆里面的硬币堆,只要保证有比你取的硬币堆更大的被Alice取走就行,而Bob固定,永远从最小堆里面取硬币就可以了。
示例3的分析举例
所以排序后按照从大到小的顺序遍历数组中的元素,每次遍历 2个元素,其中较小的元素即为这一轮取走的硬币数量。
循环遍历次数为length/3。
解题代码
class Solution {
public int maxCoins(int[] piles) {
int result = 0;
int length = piles.length;
int index = length - 2;
int n = length / 3;
Arrays.sort(piles);
while(n > 0) {
result = result + piles[index];
index = index - 2;
n--;
}
return result;
}
}