1283. Find the Smallest Divisor Given a Threshold
Problem Statement
Given an array of integers nums
and an integer threshold
, we will choose a positive integer divisor
, divide all the array by it, and sum the division's result. Find the smallest divisor
such that the result mentioned above is less than or equal to threshold
.
Each result of the division is rounded to the nearest integer greater than or equal to that element. (For example: 7/3 = 3
and 10/2 = 5
).
The test cases are generated so that there will be an answer.
Example 1:
Input: nums = [1,2,5,9], threshold = 6
Output: 5
Explanation: We can get a sum to 17 (1+2+5+9) if the divisor is 1.
If the divisor is 4 we can get a sum of 7 (1+1+2+3) and if the divisor is 5 the sum will be 5 (1+1+1+2).
Example 2:
Input: nums = [44,22,33,11,1], threshold = 5
Output: 44
Constraints:
1 <= nums.length <= 5 * 104
1 <= nums[i] <= 106
nums.length <= threshold <= 106
Intuition
Approach:
Maximum divisior can be the max_element in the array
So we go from 1 to max(array)
Find the whatever at each step and try to minimize
Links
https://leetcode.com/problems/find-the-smallest-divisor-given-a-threshold/description/
Video Links
Approach 1:
class Solution {
public:
int smallestDivisor(vector<int>& nums, int threshold) {
int low = 1, high = *max_element(nums.begin(), nums.end());
int ans;
while(low<=high){
int mid = low+(high-low)/2;
int div_sum=0;
for(auto &it:nums)
div_sum += (it + mid - 1)/mid;
if(div_sum <= threshold){
ans = mid;
high = mid-1;
}
else
low = mid+1;
}
return ans;
}
};
Approach 2:
Approach 3:
Approach 4:
Similar Problems
Previous1482. Minimum Number of Days to Make m BouquetsNext1011. Capacity To Ship Packages Within D Days / Book Allocation Problem
Last updated