【问题标题】:Max contiguous subarray sum最大连续子数组和
【发布时间】:2021-01-21 17:18:56
【问题描述】:

所以,我刚刚进行了一次在线编程评估,其中给了我 2 个问题,其中一个是这个连续子数组和提供了 2 个复杂编码问题 + 8 个 mcqs,并且将在 1 小时内完成。

在这里,我将讨论上述子数组的最大连续和之一。通常我发现的困难部分是处理负数并且是连续的。我所做的是我首先将Collection.sort(arr) 应用于给定数组,然后我再次按它们的绝对值对负值进行排序,例如for i.. arr.get(i)! =abs(arr.get(i)) for j.. if arr.get(i)>arr.get(j) then swap so final array is -1, -2, 3,4,5,例如对于给定的随机数数组,我在每次 i 和所有 j 次迭代后保持一个最大值我有if max<sum(i.e. sum+arr.get(allj)+arr(particular i) then max=sum。所以这给了我最大的总和,但是我在 14 个案例中通过了 4 个案例,我认为排序数组的原因并不总是连续的,所以任何建议,以便我如何在其中灌输这种连续的逻辑以使其适用于所有人案例。

【问题讨论】:

  • 不清楚你在问什么,也不清楚你当前的代码是什么。不知道为什么需要再次对负数进行排序;如果你对一个数组进行数字排序,它已经是数字顺序了。
  • 我不得不重新排序负数,因为它没有使其他序列连续,通常在负数的情况下,no 越高,其值越低,因此当应用排序时,负数对齐为 -2,- 1,.. 导致正面问题的部分如此连续
  • 但是如果你重新排序数组,你将如何找到“连续”部分?
  • 嗯.. 我想排序确实使它连续,只是如果数字在排序顺序中有不同的总和,那么我们必须打破
  • 它确实使整个数组连续,但是“最大的连续子数组”是整个数组,这在某种程度上解决了原始问题的一部分。您需要在原始输入数组中找到最大的连续 子数组,并将该子数组的值相加。

标签: java arrays algorithm


【解决方案1】:

我认为您将连续子数组问题误认为是子集问题,因为您不应该在逻辑中使用排序。您也可以参考这里处理负数的问题。 https://www.geeksforgeeks.org/largest-sum-contiguous-subarray/

【讨论】:

  • 感谢您的帮助,是的,我完全误解了,我同意我的错误
  • 没问题,哥们很乐意帮忙,你能关闭这个答案吗?
【解决方案2】:

this page of Wikipedia 上对最大子数组问题有很好的解释。本质上,您正在寻找 Kadane 算法的实现,本文对此进行了解释。

【讨论】:

    猜你喜欢
    • 2020-01-22
    • 2013-09-13
    • 2016-12-29
    • 1970-01-01
    • 2015-07-27
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 2015-07-05
    相关资源
    最近更新 更多