小于1的阈值c语言,在C ++中找到给定阈值的最小除数

假设我们有一个称为nums的整数数组和一个整数k(即阈值),我们将选择一个正整数除数,然后将所有数组除以该整数并将除法的结果求和。我们必须找到最小的除数,使得上述结果小于或等于阈值k。例如-如果nums = [1,2,5,9]且k = 6,则输出将为5。当除数为1时,我们的总和为(1 + 2 + 5 + 9)= 17。如果除数为4,那么我们可以将7作为(1 + 1 + 2 + 3),当除数为5时,总和为(1 + 1 + 1 + 2)= 5

保证会有答案。

为了解决这个问题,我们将遵循以下步骤-定义一个称为check的方法,它将采用x,array nums和k之类的三个参数,如下所示-

和:= 0

对于0到nums大小范围内的i – 1sum:= sum + nums [i] / x的最大值

如果sum <= k,则返回true,否则返回false

实际方法如下所示-

设置低:= 1和高:= inf

从低到高中:=低+(高–低)/ 2

如果check(mid,nums,k),则高:=中,否则低:=中+ 1

高回报让我们看下面的实现以更好地理解-

示例#include 

using namespace std;

class Solution {

public:

bool ok(int x, vector  &nums, int th){

int sum = 0;

for(int i = 0; i 

sum += ceil((double)nums[i]/(double)x);

}

return sum<=th;

}

int smallestDivisor(vector& nums, int th) {

int low = 1;

int high = 1e7;

while(low 

int mid = low + (high - low)/2;

if(ok(mid, nums, th)){

high = mid;

}else low = mid + 1;

}

return high;

}

};

main(){

vector v = {1,2,5,9};

Solution ob;

cout <

}

输入值[1,2,5,9]

6

输出结果5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值