1)给定一个整数数组(负数和正数) - 返回最大连续和的最有效算法是什么。
a)我想用动态编程解决这个问题,但复杂性是O(n ^ 2)。还有另一种方式吗?
b)如果给出无限的整数输入怎么办?有没有办法输出当前最大连续总和?我猜不是。
2)给定:一个段的数组[开始,结束](可以经过)按起点按升序排序, 还有一点。
返回包含此点的段的最有效算法是什么?/包含此点的所有段? 我想使用binarySearch来击中在此点之前开始的第一个段,而不是尝试向右和向左移动。
还有其他想法吗?
答案 0 :(得分:1)
For 1)有一个algorithm在O(n)
中工作对于2)我认为你的方法并不坏(只要你不能假设订购w.r.t.结束点)
答案 1 :(得分:1)
1)只要总和不低于零,继续连续求和总是更好。所以你只需要从左到右传递一次数组(即你有一个线性运行时算法)并记住当前的连续求和和到目前为止的最大连续求和,只要当前总和大于最大总和就更新它。
因此,在数组遍历的任何时刻,您都可以说到目前为止的最大值是多少。因此,您也可以将此算法用于(无限)输入流。
2)是的,二进制搜索听起来不错。但是如果我正确地理解了这个问题,你可以从最右边的部分开始(从最接近该点开始),然后只是遍历左边的部分。当然,最差情况运行时段的数量仍然是线性的,但平均值应该是对数的。