【发布时间】:2019-06-06 12:09:32
【问题描述】:
给定一个数组 A 和 m 个查询 每个查询都是整数T
为每个查询找到索引 i 和 j 使得
| (|sum of elements from i to j| - T) |
最小
哪里 |x|是 abs(x) 并且数组也可以有负数
我在直接面试中被问到这个问题。 我有找到所有可能的总和并存储它们的索引和排序的解决方案。
所以可能有 n*n 个总和。
这需要 O(n* n* log(n*n))
现在对于每个查询二进制搜索 T 。那将是 O(m* log(n*n))
但他要求优化它。我没有清除回合。
谁能给出提示?
【问题讨论】:
-
不能为负数吗?
-
数组的大小可以有多大?也许你可以增加平均。通过将总和存储在地图中以避免重复来提高案例性能。这减少了没有。总和一点。将每个总和转换为正数,因为无论如何我们都要取绝对值。我想到了分段树,但除非我们找到分解 T 的方法,否则这无济于事。
-
我要求约束,但面试官要求先告诉方法。他说要减少到n*n以下
-
因为我没有走得更远,所以我没想过要问 T 的范围。你现在能假设它是积极的吗?抱歉
-
@JimMischel 对于负 T,我们的任务是最小化子数组和的绝对值,它有一个 O(n log n) 解。
标签: algorithm sorting query-optimization binary-search minimum