自学内容网 自学内容网

LeetCode 每日一题 ---- 【2244.完成所有任务需要的最少轮数】

LeetCode 每日一题 ---- 【2244.完成所有任务需要的最少轮数】

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

方法:哈希表+贪心

用哈希表统计每个等级出现的次数
每次处理优先消费 3 个,m % 3 后,剩余数量只能为 0,1,2
因此对应的进行处理
若为 0 则说明 3 个 3 个的处理刚好处理完
若为 1 则说明 还剩下一个,这种情况,我们可以考虑成最后剩余了 4 个,因此可以转化为 2 个 2 个 的处理,因此最后结果 +1 即可
若为 2 则说明最后再进行一次 2 个处理即可

class Solution {
    public int minimumRounds(int[] tasks) {
        HashMap<Integer, Integer> hm = new HashMap<>();
        int len = tasks.length;
        for (int i = 0; i < len; i ++ ) {
            hm.put(tasks[i], hm.getOrDefault(tasks[i], 0) + 1);
        }
        int ans = 0;
        for (int v : hm.values()) {
            if (v == 1) {
                return -1;
            } else {
                ans += v / 3;
                // if (v % 3 == 2 || v % 3 == 1) ans ++ ;
                if (v % 3 != 0) ans ++ ;
            }
        }
        return ans;
    }
}

时间复杂度:
O(n)

空间复杂度:
O(n)


原文地址:https://blog.csdn.net/qq_52354698/article/details/138836190

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!