1760. 袋子里最少数目的球

Posted 不吐西瓜籽

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1760. 袋子里最少数目的球相关的知识,希望对你有一定的参考价值。

算法记录

LeetCode 题目:

  给你一个整数数组 nums ,其中 nums[i] 表示第 i 个袋子里球的数目。同时给你一个整数 maxOperations 。



说明

一、题目

  你的开销是单个袋子里球数目的 最大值 ,你想要 最小化 开销。

二、分析

  • 题目的意思就是在限定的拆分下得到整个数组中的最大值, 而这个最大值要尽可能的小.
  • 拆分之后的值是一个正整数, 也就意味着这个最优值肯定在 1 - max 之间, 只需要从小到大遍历这个区间值, 然后针对每个值进行拆分, 并且最终的操作数都满足限定条件, 这样不就可以拿到最优的拆分了.
  • 这里也可以采用二分来快速的迭代错误的答案.
class Solution {
    public int minimumSize(int[] nums, int target) {
        int l = 1, r = -1, mid;
        for(int i : nums) r = Math.max(r, i);
        while(l <= r) {
            mid = (l + r) >> 1;
            if(check(nums, mid) <= target) r = mid - 1;
            else l = mid + 1;
        }
        return l;
    }

    public int check(int[] nums, int target) {
        int ret = 0;
        for(int i : nums) {
            ret += i / target - 1;
            ret += i % target == 0 ? 0 : 1;
        }
        return ret;
    }
}

总结

熟悉二分的遍历方法。

以上是关于1760. 袋子里最少数目的球的主要内容,如果未能解决你的问题,请参考以下文章

1760. 袋子里最少数目的球

Leetcode.2171 拿出最少数目的魔法豆

幸运的袋子(深度优先遍历)

幸运的袋子 --- 回溯法

2017校招真题在线编程-幸运的袋子

一个袋子里有红白蓝三种球各十个,至少拿出多少个才能保证有三个球的颜色是同色?