Skip to content

M1760.袋子里最少数目的球

binary search, https://leetcode.cn/problems/minimum-limit-of-balls-in-a-bag/

思路:一开始的想法是将最多的一个袋子拆成 m + n 暴力回溯,显然太暴力了,后来看了题解,反向设置最终目标加二分法才是最合适的,用时约30分钟

cpp
class Solution 
{
public:
    int minimumSize(vector<int>& nums, int maxOperations) 
    {
        int left = 1, right = *max_element(nums.begin(), nums.end());
        int ans = 0;
        while (left <= right)
        {
            int mid = (right + left) / 2;
            long long op = 0;
            for(int x : nums)
            {
                op += (x - 1) / mid;
            }
            if (op <= maxOperations)
            {
                ans = mid;
                right = mid - 1;
            }
            else
                left = mid + 1;
        }
        return ans;
    }
};