当前位置:网站首页>Leetcode takes out the least number of magic beans

Leetcode takes out the least number of magic beans

2022-07-05 02:05:00 I'm busy 2010

To give you one   just   An array of integers  beans , Each integer represents the number of magic beans in a bag .

Please... From each bag   take out   Some beans ( It's fine too   Don't take out ), Make the rest   Non empty   In the bag ( namely   At least   also   One   Magic bean bag ) Number of magic beans   equal  . Once the magic beans are removed from the bag , You can't put it in any other bag .

Please return to where you need to take out the magic beans   Minimum number .

Example 1:

 Input :beans = [4,1,6,5]
 Output :4
 explain :
-  We never had  1  Take it out of a magic bean bag  1  A magic bean .
   The number of magic beans left in the bag is :[4,0,6,5]
-  Then we have  6  Take it out of a magic bean bag  2  A magic bean .
   The number of magic beans left in the bag is :[4,0,4,5]
-  Then we have  5  Take it out of a magic bean bag  1  A magic bean .
   The number of magic beans left in the bag is :[4,0,4,4]
 A total of  1 + 2 + 1 = 4  A magic bean , The number of magic beans left in the non empty bag is equal .
 Nothing is better than taking out  4  A plan with fewer magic beans .

Example 2:

 Input :beans = [2,10,3,2]
 Output :7
 explain :
-  We never had  2  Take it out of one of the bags of magic beans  2  A magic bean .
   The number of magic beans left in the bag is :[0,10,3,2]
-  Then we have... From another  2  Take it out of a magic bean bag  2  A magic bean .
   The number of magic beans left in the bag is :[0,10,3,0]
-  Then we have  3  Take it out of a magic bean bag  3  A magic bean .
   The number of magic beans left in the bag is :[0,10,0,0]
 A total of  2 + 2 + 3 = 7  A magic bean , The number of magic beans left in the non empty bag is equal .
 Nothing is better than taking out  7  A plan with fewer magic beans .

Tips :

  • 1 <= beans.length <= 10^5
  • 1 <= beans[i] <= 10^5

C++

class Solution {
public:
    long long minimumRemoval(vector<int>& beans) {
        long long sum=0;
        int n=beans.size();
        map<long,long> mp;
        for(int i=0;i<n;i++) {
            sum+=beans[i];
            mp[beans[i]]++;
        }
        long long res=sum;
        long long pre=0;
        long long num=n;
        for(auto it:mp) {
            num-=it.second;
            sum-=it.second*it.first;
            res=min(res,sum-num*it.first+pre);  //  Based on the current quantity , The big one is flattened , Small discard 
            pre+=it.second*it.first;
        }
        return res;
    }
};

原网站

版权声明
本文为[I'm busy 2010]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/02/202202140952284785.html