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;
}
相关推荐
飞Link8 小时前
什么是 AirSim?一文读懂无人机仿真平台
python·算法·无人机
学逆向的8 小时前
C 堆区内存管理
c语言·开发语言·网络安全
一去不复返的通信er10 小时前
贪心算法-合并区间(LeetCode 56)
算法·leetcode·贪心算法
阿尼卡~10 小时前
VS Code 配置 C 语言开发环境(Windows 10/11):从 GCC 安装到运行、断点调试,一篇搞定
c语言·开发语言·windows
Shaoshing10 小时前
LeetCode100 49. 字母异位词分组
java·算法
YFJ_mily11 小时前
第二届区块链技术与基础模型国际学术会议(BTFM2027)
算法·区块链·能源·智能系统·rdlink研发家·机器人自动化
汤姆宝库11 小时前
收官深拆:第一性原理、产业电网与未来推演
大数据·人工智能·算法
moshuying13 小时前
块扩散 + GDN 改造:Clover 把「并行生成」塞进了 Agent 的长上下文里
前端·算法
没落之王13 小时前
历史系统建模:宋初太祖太宗「再立天庭」秩序重构推演
人工智能·算法·重构