我必须像最大的子阵列问题一样解决问题。我必须找到平均值大于k的最大子阵列。我想到了以下技巧。我可以将大小为n的数组A []转换为B [],其中B [i] = A [i] - k。所以现在平均值必须> 0。但平均值大于零并不仅仅意味着总和大于零?所以我可以直接应用Kadane的算法。我对吗? (总是在有1个正值的约束下)
答案 0 :(得分:4)
阵列A是:1 10 -1 -1 4 -1 7 2 8 1 .....然后给定的k是5 阵列B为:-4 5 -6 -6 -1 -6 2 -3 3 -4 阵列C为:-4 1 -5 -11 -12 -18 -16 -19 -16 -20 所以我们正在寻找的子阵列是[7,2,8],长度为3,并且具有相同的第一个和最后一个元素,即-16 !!!!
编辑:我忘了告诉我们正在搜索O(n)或O(n * logn)算法.... @lets_solve_it你是对的,但你的算法是O(n ^ 2)whitch是方式为我们想要处理的数据做大。我接近用c ++中的函数map解决它,whitch就像一个哈希表。我认为这是正确的方向,因为这里数组C的元素与它们的索引有直接关系!另外我们的教授告诉我们另一个可能的解决方案是再次制作阵列C,然后采取(特殊?)枢轴进行快速排序......但我并不完全理解我们对快速排序的期望。
答案 1 :(得分:2)
@ panos7:
创建数组C(部分和数组)后,您将寻找C,Ci和Cj两个值,
使得Cj> = Ci,并且(j-i)尽可能“大”。 (j-i) - > MAX。
然后返回j-i。
在你的例子中,-16> = - 18所以你返回了j-i = 9-6 = 3
这是正确的答案!