LeetCode //C - 1283. Find the Smallest Divisor Given a Threshold

1283. Find the Smallest Divisor Given a Threshold

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).ou can split the string into "ab" and "c", and change 1 character in "ab" to make it palindrome.

Example 2:

Input: s = "aabbc", k = 3

Output: 0

Explanation: You can split the string into "aa", "bb" and "c", all of them are palindrome.

Example 3:

Input: s = "leetcode", k = 8

Output: 0

Constraints:
  • 1 < = n u m s . l e n g t h < = 5 ∗ 10 4 1 <= nums.length <= 5 * 10^4 1<=nums.length<=5∗104
  • 1 < = n u m s i < = 10 6 1 <= numsi <= 10^6 1<=numsi<=106
  • n u m s . l e n g t h < = t h r e s h o l d < = 10 6 nums.length <= threshold <= 10^6 nums.length<=threshold<=106

From: LeetCode

Link: 1283. Find the Smallest Divisor Given a Threshold


Solution:

Ideas:

Use binary search on the divisor. For each divisor, calculate the rounded-up sum using (numsi + divisor - 1) / divisor.

Code:
c 复制代码
int smallestDivisor(int* nums, int numsSize, int threshold) {
    int left = 1;
    int right = 0;

    for (int i = 0; i < numsSize; i++) {
        if (nums[i] > right) {
            right = nums[i];
        }
    }

    while (left < right) {
        int mid = left + (right - left) / 2;
        long long sum = 0;

        for (int i = 0; i < numsSize; i++) {
            sum += (nums[i] + mid - 1) / mid;

            if (sum > threshold) {
                break;
            }
        }

        if (sum <= threshold) {
            right = mid;
        } else {
            left = mid + 1;
        }
    }

    return left;
}
相关推荐
啦啦啦啦啦zzzz1 小时前
一致性哈希
服务器·算法·哈希算法·c++20·分布式存储
我不会起名字3222 小时前
二叉树的遍历与二叉搜索树:把递归、迭代、还原树一次讲透
数据结构·leetcode·二叉树·二叉搜索树
垆边人似月.2 小时前
嵌入式传感器寄存器数据解析
算法
Tingmanyi2 小时前
YOLOv13改进策略【卷积层篇】| RFAConv 感受野注意力卷积,每个位置都值得被单独加权
深度学习·算法·yolo·目标检测·计算机视觉
yi0112 小时前
Leetcode 49 用 “身份证‘‘巧解
人工智能·笔记·python·算法·leetcode·哈希表
liuchangng2 小时前
类Jev项目Kev从入门到实战(7):如何选型:决策树与 checklist
算法·决策树·机器学习
yi0112 小时前
DAY22: LeetCode 733:图像渲染——从二维网格开始理解 DFS 和 BFS
数据结构·笔记·python·算法·leetcode·深度优先·宽度优先
Pniubi3 小时前
力扣41缺失的第一个正数(哈希表法)
算法·leetcode·职场和发展
地平线开发者3 小时前
MQBench QAT量化实践指南
人工智能·算法·自动驾驶