DEV Community

Riyaz
Riyaz

Posted on

 

Remove Stones to minimize the Total(code and Explanation)

PROBLEM STATEMENT
You are given a 0-indexed integer array piles, where piles[i] represents the number of stones in the ith pile, and an integer k. You should apply the following operation exactly k times:

Choose any piles[i] and remove floor(piles[i] / 2) stones from it.
Notice that you can apply the operation on the same pile more than once.

Return the minimum possible total number of stones remaining after applying the k operations.

floor(x) is the greatest integer that is smaller than or equal to x (i.e., rounds x down).
'''
'''
Example 1:

Input: piles = [5,4,9], k = 2
Output: 12
Explanation: Steps of a possible scenario are:

  • Apply the operation on pile 2. The resulting piles are [5,4,5].
  • Apply the operation on pile 0. The resulting piles are [3,4,5]. The total number of stones in [3,4,5] is 12. Example 2:

Input: piles = [4,3,6,7], k = 3
Output: 12
Explanation: Steps of a possible scenario are:

  • Apply the operation on pile 2. The resulting piles are [4,3,3,7].
  • Apply the operation on pile 3. The resulting piles are [4,3,3,4].
  • Apply the operation on pile 0. The resulting piles are [2,3,3,4]. The total number of stones in [2,3,3,4] is 12.

EXPLANATION
Everytime you want the maximum value from the pile to be divided.So we will use a maxheap to store the elements in
greatest to least order and after dividing we push the resultant value again inside the heap
CODE

from heapq import *
class Solution:
    def minStoneSum(self, piles: List[int], k: int) -> int:
        maxHeap = []
        for i in range(len(piles)):
            heappush(maxHeap, -piles[i])

        i = k
        while i > 0:
            temp = heappop(maxHeap)
            x = floor(temp/2)
            heappush(maxHeap,x)
            i -= 1
        return -sum(maxHeap)
Enter fullscreen mode Exit fullscreen mode

Time Complexity
O(KlogN)
Space Complexity
O(N) for storing N elements in heap

Top comments (0)

An Animated Guide to Node.js Event Loop

Node.js doesn’t stop from running other operations because of Libuv, a C++ library responsible for the event loop and asynchronously handling tasks such as network requests, DNS resolution, file system operations, data encryption, etc.

What happens under the hood when Node.js works on tasks such as database queries? We will explore it by following this piece of code step by step.