我需要某个问题的帮助。假设你有一个排序的数组" 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
但我想以更有效的方式做到这一点,有人可以提出更有效的方法吗? 在此先感谢
答案 0 :(得分:3)
由于您的数组已排序,您可以:
从最后/第一个位置开始(取决于最大值的位置)
3.1检查该值是否大于X,如果不是,则无法进一步减少A的总和
3.2用X替换并用values-x
减少saved_sum3.3检查saved_sum< = Y,如果不是在3.1重复,其中第二大值为
整个事物在O(n)中运行,因为A是有序的,最大/下一个最大可以在O(1)中找到