Description
You are given a 0-indexed integer array nums, and an integer k.
You are allowed to perform some operations on nums, where in a single operation, you can:
- Select the two smallest integers
xandyfromnums. - Remove
xandyfromnums. - Insert
(min(x, y) * 2 + max(x, y))at any position in the array.
Note that you can only apply the described operation if nums contains at least two elements.
Return the minimum number of operations needed so that all elements of the array are greater than or equal to k.
Example 1:
Input: nums = [2,11,10,1,3], k = 10
Output: 2
Explanation:
- In the first operation, we remove elements 1 and 2, then add
1 * 2 + 2tonums.numsbecomes equal to[4, 11, 10, 3]. - In the second operation, we remove elements 3 and 4, then add
3 * 2 + 4tonums.numsbecomes equal to[10, 11, 10].
At this stage, all the elements of nums are greater than or equal to 10 so we can stop.
It can be shown that 2 is the minimum number of operations needed so that all elements of the array are greater than or equal to 10.
Example 2:
Input: nums = [1,1,2,4,9], k = 20
Output: 4
Explanation:
- After one operation,
numsbecomes equal to[2, 4, 9, 3]. - After two operations,
numsbecomes equal to[7, 4, 9]. - After three operations,
numsbecomes equal to[15, 9]. - After four operations,
numsbecomes equal to[33].
At this stage, all the elements of nums are greater than 20 so we can stop.
It can be shown that 4 is the minimum number of operations needed so that all elements of the array are greater than or equal to 20.
Constraints:
2 <= nums.length <= 2 * 1051 <= nums[i] <= 1091 <= k <= 109- The input is generated such that an answer always exists. That is, after performing some number of operations, all elements of the array are greater than or equal to
k.
Solution
Python3
class Solution:
def minOperations(self, nums: List[int], k: int) -> int:
N = len(nums)
res = 0
pq = list(sorted(nums))
while len(pq) >= 2 and pq[0] < k:
first, second = heappop(pq), heappop(pq)
heappush(pq, first * 2 + second)
res += 1
return res