1561. Maximum Number of Coins You Can Get

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

 

Constraints:

  • 3 <= piles.length <= 10^5
  • piles.length % 3 == 0
  • 1 <= piles[i] <= 10^4
class Solution {
    public int maxCoins(int[] piles) {
        Arrays.sort(piles);
        int result = 0;
        int n = piles.length;
        int l = 0, r = n - 1;
        int[] res = new int[n];
        int ind = 0;
        while(l < r) {
            res[ind++] = piles[r--];
            res[ind++] = piles[r--];
            res[ind++] = piles[l++];
        }
        for(int i = 1; i < n; i += 3) result += res[i];
        return result;
    }
}

Sort, 每次取两个最大的和一个最小的重新排列,最后每隔3个把中间那个取出来。

class Solution {
    public int maxCoins(int[] piles) {
        Arrays.sort(piles);
        int result = 0;
        int n = piles.length;
        int times = n / 3;
        int ind = n - 2;
        while(times-- > 0) {
            result += piles[ind];
            ind -= 2;
        }
        return result;
    }
}

啊?排完序后直接从倒数第二个开始每隔一个取,取n / 3次。

posted @ 2020-08-30 12:41  Schwifty  阅读(221)  评论(0)    收藏  举报