我知道如何不用分而治之来解决这个问题,但我不知道用分而治之的方法。
感谢帮助!
将列表l拆分为两个子列表l1、L2。设l1_last和l2_first分别是l1的最后一个元素,l2的第一个元素(l2_first紧随l1_last之后)。
求s1a是l1中不包含l1_last的子列表l1a的最大邻接和,s1b是l1中包含l1_last的子列表l1b的最大邻接和。
同样地,对l2执行相同的操作,得到s2a、l2a和s2b、l2b,其中l1_last被L2_First替换。l的子列表的最大邻接和是s1a、s1b、s2a、s2b、s1b+s2b与相应子列表l1a、l1b、l2a、L2bC(l1b、l2b)的最大值。
在长度为N的数组中求和最大的邻接子数组。 输入格式: 输出格式: 返回一个整数,表示相邻子数组的最大可能和。 制约因素: 输入2:A=[-2,1,-3,4,-1,2,1,-5,4] 产出2:6 说明2:子数组[4,-1,2,1]的最大可能和为6。 你能告诉我为什么下面的代码不起作用,代码中的错误是什么吗:
所以,我刚刚进行了一次在线编程评估,给了我两个问题,其中一个是这个连续的子数组和提供了两个复杂的编码问题+8个MCQ,并将在1小时内完成。 这里我将讨论上面提到的子数组的最大邻接和之一。通常,我发现困难的部分是处理负数和连续。我所做的是首先将应用到给定的数组,然后再次按照负值的绝对值排序,就像i的例如,对于给定的随机数组,我在每个i和所有j迭代后都有一个max,如果max 。
我刚开始编程,今天我完成了二维空间中最近对问题的简单解法。(2个用于环路) 然而,我放弃了在O(n log n)中找到任何能解决这一问题的方法。即使在研究了它之后,我仍然不明白这怎么能比琐碎的方法更快。 我理解的是:->首先,我们将数组分成两半,只考虑X坐标对所有内容进行排序。这可以在n log n中完成。 接下来是递归调用,它们在每一半中“找到两个距离最小的点”。但是在O(n^2)下是怎么做到的
本文向大家介绍在C ++中使用分而治之算法的最大子数组总和,包括了在C ++中使用分而治之算法的最大子数组总和的使用技巧和注意事项,需要的朋友参考一下 假设我们有一个带有正值和负值的数据列表。我们必须找到其总和最大的连续子数组的总和。假设列表包含{-2,-5,6,-2,-3,1,5,-6},则最大子数组的总和为7。它是{6,-2,-3的总和,1,5} 我们将使用分而治之方法解决此问题。步骤如下所示
null 我的代码使用一个递归函数和一个helper print()函数来查找这些数字中最大的一个 编辑:发布print()函数,我不知何故错过了这个函数
免责声明:我知道这个问题可以通过数组的单次传递非常有效地解决,但我对用分而治之法做这个很感兴趣,因为它与我们用分而治之法处理的典型问题有点不同。 假设给定一个浮点数组x[1:n],大小为n,间隔长度为l。问题是设计一个分治算法,从具有最大和的数组中找到长度为l的子数组。 现在,为了将问题分成两半,我决定在n-l+1/2处中断数组,以便将相等数量的子数组分配到我的除法的两半,如下面的算法所示。同样,