LeetCode 2234. Maximum Total Beauty of the Gardens Solution in Java, C++, Python & More | Explanation + Code

CoderIndeed
0
2234. Maximum Total Beauty of the Gardens

Description

Alice is a caretaker of n gardens and she wants to plant flowers to maximize the total beauty of all her gardens.

You are given a 0-indexed integer array flowers of size n, where flowers[i] is the number of flowers already planted in the ith garden. Flowers that are already planted cannot be removed. You are then given another integer newFlowers, which is the maximum number of flowers that Alice can additionally plant. You are also given the integers target, full, and partial.

A garden is considered complete if it has at least target flowers. The total beauty of the gardens is then determined as the sum of the following:

  • The number of complete gardens multiplied by full.
  • The minimum number of flowers in any of the incomplete gardens multiplied by partial. If there are no incomplete gardens, then this value will be 0.

Return the maximum total beauty that Alice can obtain after planting at most newFlowers flowers.

 

Example 1:

Input: flowers = [1,3,1,1], newFlowers = 7, target = 6, full = 12, partial = 1
Output: 14
Explanation: Alice can plant
- 2 flowers in the 0th garden
- 3 flowers in the 1st garden
- 1 flower in the 2nd garden
- 1 flower in the 3rd garden
The gardens will then be [3,6,2,2]. She planted a total of 2 + 3 + 1 + 1 = 7 flowers.
There is 1 garden that is complete.
The minimum number of flowers in the incomplete gardens is 2.
Thus, the total beauty is 1 * 12 + 2 * 1 = 12 + 2 = 14.
No other way of planting flowers can obtain a total beauty higher than 14.

Example 2:

Input: flowers = [2,4,5,3], newFlowers = 10, target = 5, full = 2, partial = 6
Output: 30
Explanation: Alice can plant
- 3 flowers in the 0th garden
- 0 flowers in the 1st garden
- 0 flowers in the 2nd garden
- 2 flowers in the 3rd garden
The gardens will then be [5,4,5,5]. She planted a total of 3 + 0 + 0 + 2 = 5 flowers.
There are 3 gardens that are complete.
The minimum number of flowers in the incomplete gardens is 4.
Thus, the total beauty is 3 * 2 + 4 * 6 = 6 + 24 = 30.
No other way of planting flowers can obtain a total beauty higher than 30.
Note that Alice could make all the gardens complete but in this case, she would obtain a lower total beauty.

 

Constraints:

  • 1 <= flowers.length <= 105
  • 1 <= flowers[i], target <= 105
  • 1 <= newFlowers <= 1010
  • 1 <= full, partial <= 105

Solutions

Solution 1: Enumeration + Binary Search

We note that if the number of flowers in a garden is already greater than or equal to target, then this garden is already a perfect garden and cannot be changed. For imperfect gardens, we can plant more flowers to make them perfect gardens.

Let's enumerate how many gardens will eventually become perfect gardens. Suppose initially there are x perfect gardens, then we can enumerate in the range [x, n]. Which imperfect gardens should we choose to become perfect gardens? In fact, we should choose the gardens with more flowers so that the remaining flowers can be used to increase the minimum value of the imperfect gardens. Therefore, we sort the array flowers.

Next, we enumerate the number of perfect gardens x. The current garden to become a perfect garden is target[n-x], and the number of flowers needed is max(0, target - flowers[n - x]).

We update the remaining flowers newFlowers. If it is less than 0, it means we can no longer make more gardens perfect, so we stop the enumeration.

Otherwise, we perform a binary search in the range [0,..n-x-1] to find the maximum index of the imperfect gardens that can be turned into perfect gardens. Let the index be l, then the number of flowers needed is cost = flowers[l] × (l + 1) - s[l + 1], where s[i] is the sum of the first i numbers in the flowers array. If we can still increase the minimum value, we calculate the increase newFlowers - costl + 1, and ensure that the final minimum value does not exceed target-1. That is, the minimum value y = min(flowers[l] + newFlowers - costl + 1, target - 1). Then the beauty value of the garden is x × full + y × partial. The answer is the maximum of all beauty values.

The time complexity is O(n × log n), and the space complexity is O(n). Here, n is the length of the flowers array.

PythonJavaC++GoTypeScript
class Solution: def maximumBeauty( self, flowers: List[int], newFlowers: int, target: int, full: int, partial: int ) -> int: flowers.sort() n = len(flowers) s = list(accumulate(flowers, initial=0)) ans, i = 0, n - bisect_left(flowers, target) for x in range(i, n + 1): newFlowers -= 0 if x == 0 else max(target - flowers[n - x], 0) if newFlowers < 0: break l, r = 0, n - x - 1 while l < r: mid = (l + r + 1) >> 1 if flowers[mid] * (mid + 1) - s[mid + 1] <= newFlowers: l = mid else: r = mid - 1 y = 0 if r != -1: cost = flowers[l] * (l + 1) - s[l + 1] y = min(flowers[l] + (newFlowers - cost) // (l + 1), target - 1) ans = max(ans, x * full + y * partial) return ans(code-box)

Post a Comment

0Comments

Post a Comment (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Check Now
Accept !