📌  相关文章
📜  最小 K 使得除以 K 后的数组元素总和不超过 S(1)

📅  最后修改于: 2023-12-03 14:55:20.099000             🧑  作者: Mango

最小 K 使得除以 K 后的数组元素总和不超过 S

给定一个长度为n的数组nums和一个整数S,你需要找到一个最小的正整数K,使得将数组中的每个元素都除以K后得到一个新的数组,新数组中所有元素的总和不超过S。

解法

首先,我们需要找到nums中最小的元素min,这个最小值除以K的值k是答案的一个下界。我们可以通过二分查找法找到满足要求的最小的K。

对于一个K值,我们可以遍历一遍数组,对于每个元素,计算它除以K后的值,然后累加起来得到新数组的元素总和sum。如果sum小于等于S,那么这个K值是可行的,我们继续测试更小的K值,否则这个K值不可行,我们需要试图增大K值。

时间复杂度

二分查找用了O(log_2(N))的时间,每轮遍历数组用了O(N)的时间,因此总时间复杂度为O(N*log_2(N))。

代码
def find_K(nums, S):
    def check(k):
        sum = 0
        for num in nums:
            sum += (num // k)
        return sum <= S

    low, high = 1, min(nums)
    while low <= high:
        mid = (low + high) // 2
        if check(mid):
            high = mid - 1
        else:
            low = mid + 1
    return low