每日一题LeetCode 1561. 你可以获得的最大硬币数目

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;
    }
}

猜你喜欢

转载自blog.csdn.net/bai_ye_/article/details/108864023