leetcode 1561. Maximum Number of Coins You Can Get(python)

586 阅读2分钟

描述

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 ith pile.

Return the maximum number of coins which you can have.

Example 1:

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.

Example 2:

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

Example 3:

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

Note:

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

解析

根据题意,其实游戏步骤就是三步,我先随便挑三种硬币类型,Alice 取最多的那种,我取次多的那种,Bob 取最少的那种,重复这个过程,问每次我可能得到的最多的硬币数量是多少。其实规则很简单,通过找规律就会发现,假如 piles 是 [1,2,4,2,7,8],则步骤如下取结果最大:

[1,7,8] 取 7
[2,2,4] 取 2

假如 piles 是 [1,2,3,4,5,6,7,8,9] ,

[1,8,9] 取 8
[2,6,7] 取 6
[3,4,5] 取 4

会使得最后的结果最大,可以总结出规律,一共我可以取 len(piles)//3 次,每次取 piles 升序排列结果的倒数第二个元素、第四个元素、第六个元素。。。的值,会使得最后的结果最大。

解答

class Solution(object):
    def maxCoins(self, piles):
        """
        :type piles: List[int]
        :rtype: int
        """
        piles.sort()
        res = 0
        n = len(piles)
        for i in range(len(piles)//3):
            res += piles[n-(i+1)*2]
        return res
        	      
		

运行结果

Runtime: 544 ms, faster than 74.36% of Python online submissions for Maximum Number of Coins You Can Get.
Memory Usage: 23.3 MB, less than 68.80% of Python online submissions for Maximum Number of Coins You Can Get.

原题链接:leetcode.com/problems/ma…

您的支持是我最大的动力