完成所有任务需要的最少轮数

题目 给你一个下标从 0 开始的整数数组 tasks ,其中 tasks[i] 表示任务的难度级别。在每一轮中,你可以完成 2 个或者 3 个 相同难度级别 的任务。

返回完成所有任务需要的 最少 轮数,如果无法完成所有任务,返回 -1 。

思路

贪心+哈希表 求解最优问题的四种思路: 贪心、二分(值)、广度优先搜索、动态规划

代码

class Solution {
          
   
public:
    int minimumRounds(vector<int>& tasks) {
          
   

        // 贪心+哈希表
        // 求解最优问题的四种思路:
        // 贪心、二分(值)、广度优先搜索、动态规划

        unordered_map<int,int> mp;
        int ans=0;

        for(int task:tasks){
          
   

            mp[task]++;
        }

        for(auto& [first,second]:mp){
          
   

            if(second==1)
            return -1;
            else{
          
   

                if(second%3==0)
                ans+=(second/3);
                else
                ans+=(second/3)+1;
            }
        }

        return ans;
        
    }
};
经验分享 程序员 微信小程序 职场和发展