查找要由给定数字替换的数组中的元素数,使得数组的总和小于另一个给定数

时间:2018-01-22 10:56:45

标签: python arrays

我需要某个问题的帮助。假设你有一个排序的数组" A",它有" N"元素和两个整数" X"和" Y"。现在要求你们两个找到" A"中的元素数量。你必须用" X"这样数组的总和" A"小于" Y"。使用以下技术可以在O(n ^ 2)中轻松解决给定的问题。(仅针对此的代码片段是特定操作)。

sum = None
count = None
for i in range(N):
   for j in range(i):
        A[j] = X
        count += 1
   for k in range(N):
        sum += A[k]
   if sum==Y:
        print(count)
        count = 0
        break

但我想以更有效的方式做到这一点,有人可以提出更有效的方法吗? 在此先感谢

1 个答案:

答案 0 :(得分:3)

由于您的数组已排序,您可以:

  1. 计算数组的总和(O(n))
  2. 检查saved_sum< = Y是否满足(O(1))
  3. 从最后/第一个位置开始(取决于最大值的位置)

    3.1检查该值是否大于X,如果不是,则无法进一步减少A的总和

    3.2用X替换并用values-x

    减少saved_sum

    3.3检查saved_sum< = Y,如果不是在3.1重复,其中第二大值为

  4. 整个事物在O(n)中运行,因为A是有序的,最大/下一个最大可以在O(1)中找到