对于上下文,这是codewars中的problem语句:problem语句
它本质上是一个经典的“查找最大子数组和”问题,尽管增加了一个重要的细节,即给定一个包含所有负数的数组,应该返回一个“0”,而不仅仅是最大的负数值。
首先,我充分意识到这个解决方案不是一个非常好或有效的解决方案。话虽如此,逻辑对我来说仍然是有意义的,所以我不太明白为什么它适用于某些输入而不是其他输入。我不能提供这个程序无效的输入,因为测试用例隐藏在代码战中。
我尝试使用以下示例运行代码;
再说一遍,我只想知道为什么这个代码是不正确的背后的逻辑。我不是在寻找一个正确的替代解决方案(我现在已经意识到Kadane算法的存在)。这是我第一次盲目地尝试解决这个问题,所以我真的很想知道我做错了什么,这样我就可以从中吸取教训。
def max_sequence(arr):
max_sum = 0
max_subarr_index = 0
for i, val in enumerate(arr):
max_sum = max(max_sum, sum(arr[max_subarr_index:i+1]), val)
if max_sum == val:
max_subarr_index = i
return max_sum
该漏洞存在于max_sum
在算法中有双重用法。它习惯于:
>
保持到目前为止搜索的数组中找到的最大和
更新MAX_SUBARR_INDEX
,如果较大的数组直接从索引I
开始,而不是MAX_SUBARR_INDEX
对于第一点,您的算法工作得很好。其次,它失败了,因为max_sum
不需要与当前所查看的子数组有任何关系。例如:
arr = [3, -4, 1, 1, ...]
现在对于i=3
,变量如下所示:
max_sum = 3
max_subarr_index = 0
即。算法仍然“认为”最大子数组从索引0开始,其和为3。但是,以索引3结尾的最大子数组实际上是[1,1]
,max_subarr_index=2
。即。实际上有两个最大的子数组:
[3]
表示i=3
)[1,1]
对于i=3
)您可以通过仅根据val
和sum(arr[max_subarr_index:i+1])
)的最大值更新max_subarr_index
:
def max_sequence(arr):
max_sum = 0
max_subarr_index = 0
for i, val in enumerate(arr):
# update max_subarr_index based on sum of "current" max subarray
tmp = max(sum(arr[max_subarr_index:i+1]), val)
if tmp == val:
max_subarr_index = i
# global maximum found so far
max_sum = max(max_sum, tmp)
return max_sum
您将获得一个包含n个元素的数组:<代码>d[0],d[1]。。。,d【n-1】。计算所有相邻子数组的最大差值之和。 形式上:S=sum{max{d[l,..., r]}-min{d[l,..., r}},Δ0 输入: 输出: 解释: l=0;r=1;数组:[1,3]和=最大值([1,3])-最小值([1,3])=3-1=2 l=0;r=2;数组:[1,3,2]和=最大值([1,3,2])-最小值(
null 我的代码使用一个递归函数和一个helper print()函数来查找这些数字中最大的一个 编辑:发布print()函数,我不知何故错过了这个函数
例如:如果数组是[9,8,7,6,5,4,3,1,2,2],它应该返回46(长度为7的子数组[9,8,7,6,5,4,3]和长度为2的子数组[2,2]之和)。不能组合[9,8,7,6,5,4,3]和[1,2,2],因为这将产生长度为10的非素数的连续子数组(幂等性)。 有谁能解释一下如何使用DP来解决这类问题吗?多谢了。
在长度为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 。
最大乘积子数组给定一个数组包含正整数和负整数,求最大乘积的子数组。例子: 但不能破题找到子数组。