问题描述
|
使用蛮力的最大子数组问题的运行时/内存复杂度是多少?
他们可以进一步优化吗?特别是内存复杂度?
谢谢,
解决方法
蛮力是欧米茄(n ^ 2)。使用分而治之,您可以实现Theta(n lg n)复杂度。有关更多细节,请参见《算法简介》等许多书籍,或本次讲座等Web上的各种资源。
,如该答案中所建议,您可以使用具有O(n)复杂度的Kadane算法。 Java实现:
public int[] kadanesAlgorithm (int[] array) {
int start_old = 0;
int start = 0;
int end = 0;
int found_max = 0;
int max = array[0];
for(int i = 0; i<array.length; i++) {
max = Math.max(array[i],max + array[i]);
found_max = Math.max(found_max,max);
if(max < 0)
start = i+1;
else if(max == found_max) {
start_old=start;
end = i;
}
}
return Arrays.copyOfRange(array,start_old,end+1);
}