Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 最大和邻接子阵列(访谈问题)_Java_C++_C_Algorithm - Fatal编程技术网

Java 最大和邻接子阵列(访谈问题)

Java 最大和邻接子阵列(访谈问题),java,c++,c,algorithm,Java,C++,C,Algorithm,可能重复: 今天在Adobe软件工程师职位面试中,我被问到了以下问题 问题给定一个整数数组arr[1..n]。编写一个算法来查找数组中具有最大和的相邻子数组的和。如果所有数字都为负数,则返回0 示例 给定数组arr[1..6]=[12,14,0,-4,61,-39] 回答 83由[12,14,0,-4,61]构成 我可以想出一个运行在O(nlogn)中的解决方案,但我认为它不是很有效。面试官让我写一个O(n)算法。我想不出来 你知道如何为这个问题编写一个O(n)解决方案吗? 要在C/C++/J

可能重复:

今天在Adobe软件工程师职位面试中,我被问到了以下问题

问题给定一个整数数组
arr[1..n]
。编写一个算法来查找数组中具有最大和的相邻子数组的和。如果所有数字都为负数,则返回0

示例

给定数组
arr[1..6]=[12,14,0,-4,61,-39]

回答

83由
[12,14,0,-4,61]
构成

我可以想出一个运行在
O(nlogn)
中的解决方案,但我认为它不是很有效。面试官让我写一个
O(n)
算法。我想不出来

你知道如何为这个问题编写一个
O(n)
解决方案吗? 要在C/C++/Java中实现的算法

提前感谢

您可以使用在O(n)中运行的

这是算法(无耻地抄袭)

初始化:
到目前为止的最大值=0
此处的最大值=0
数组中每个元素的循环
(a) max_ending_here=max_ending_here+a[i]
(b) if(此处的最大值小于0)
此处的最大值=0
(c) 如果(最大值到目前为止<最大值到此结束)
max\u so\u far=max\u ending\u此处
返回到目前为止的最大值

这里有一个指向维基百科文章的链接供参考:这个数组怎么样:[-12,14,0,-4,61,-39]实际结果:[-12,14,0,-4,61]预期:[14,0,-4,61]在“编程珍珠”(Programming Pearls)——推荐阅读中有一整章关于这个问题。这是一个非常简单的问题。一个接一个地从两端穿过。并继续从每一端修剪阵列,直到从开始到当前位置或从结束到当前位置的总和为负值。O(n)
Initialize:
    max_so_far = 0
    max_ending_here = 0

Loop for each element of the array
  (a) max_ending_here = max_ending_here + a[i]
  (b) if(max_ending_here < 0)
            max_ending_here = 0
  (c) if(max_so_far < max_ending_here)
            max_so_far = max_ending_here
return max_so_far