- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的算法如下所示:
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
在此基础上,我编写的代码如下:
def maxSubArraySum(a,size):
max_so_far = 0
max_ending_here = 0
for i in range(0, size):
max_ending_here = max_ending_here + a[i]
if max_ending_here < 0:
max_ending_here = 0
# Do not compare for all elements. Compare only
# when max_ending_here > 0
elif (max_so_far < max_ending_here):
max_so_far = max_ending_here
return max_so_far
# Driver function to check the above function
a = [-1,-2,-3,-4]
print ("Maximum contiguous sum is", maxSubArraySum(a,len(a))).
当数组为[-1,-2,-3,-4]
时,这段代码以某种方式给我输出0
。我当前的代码中有什么需要纠正的地方吗?
最佳答案
Simple idea of the Kadane's algorithm is to look for all positive contiguous segments of the array (max_ending_here is used for this). And keep track of maximum sum contiguous segment among all positive segments (max_so_far is used for this).
因此,包含所有负数的列表将使算法出错。但如果你仔细想想,所有负整数列表的最大和只不过是 max(list_of_negative_integers)
。
但是,如果您想创建通用解决方案,
max_in_array
和一个标志
。 max_in_array
保持最新。max_so_far
,否则返回max_in_array
这里是一个实现供引用:
def max_sub_array_sum(arr):
max_so_far = max_ending_here = 0
max_in_arr = arr[0]
flag = True
for item in arr:
if flag:
max_in_arr = max(max_in_arr, item)
max_ending_here = max(0, max_ending_here + item)
max_so_far = max(max_so_far, max_ending_here)
if item > 0:
flag = False
return max_in_arr if flag else max_so_far
另一种没有额外变量的方法:
def max_sub_array_sum(arr):
max_so_far = curr_max = arr[0]
for item in arr[1:]:
curr_max = max(item, curr_max + item)
max_so_far = max(max_so_far, curr_max)
return max_so_far
关于python - 当第一个数字为负数时,Kadane 算法无法满足条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49234286/
我已经编写了 Kadane 算法,但不知何故它返回了错误的结果。不知道为什么。这是实现。基本上是在数组中找到“和最大的 ubarray” public class Kadane { publi
我将 Kadane 的算法修改为以下内容,这样即使在数组中包含所有负数的情况下它也能正常工作。 //Largest Sum Contiguous Subarray #include #include
尝试使用此处解释的 Kadane 算法:https://www.youtube.com/watch?v=OexQs_cYgAQ&t=721s 在这个数字数组中:[-5, 10, 2, -3, 5, 8
这个算法很有趣,我知道它被用于图像处理(可能还有其他场景),但我觉得奇怪的是这个算法也对负值进行操作,而负值在成像世界中几乎不存在其中有很多 unsigned int 来表示值。 您能否提供一个利用
假设 max_sequence(Array A):是 Kadane 算法的一个解。 你有一个数组:5,-3,-4,8,-1,12,-6,+4,+4,-14,+2,+8 然后将此数组缩短为正负序列的条纹
我正在研究 Kadane 的最大子数组问题算法。现在我从声明中了解到我们已经找到一个 子数组 的算法。子数组是否包含整个数组本身。 其实我在尝试下面的程序 int main(void)
算法说明:最大子数组问题给定一个由 n 个实数组成的序列 A(1) … A(n),确定一个连续的子序列 A(i) … A(j),其中子序列中的元素之和最大。 算法: int kadane(int a[
Initialize: max_so_far = 0 max_ending_here = 0 Loop for each element of the array (a) max
int array[] = {-1, 4, -2, 5, -5, 2, -20, 6}; 如果我有那个数组,我的 Kadane 算法实现可以找到最大子数组: int max_so_far = IN
有人可以告诉我 Kadane 算法中发生了什么吗?想检查我的理解。这就是我的看法。 你正在遍历数组,每次将 ans 变量设置为看到的最大值,直到该值变为负数,然后 ans 变为零。 与此同时,每次循环
这个问题在这里已经有了答案: Maximum sum sublist? (13 个答案) 关闭 8 年前。 我有以下 Kadane's algorithm 的实现求解数组的最大子数组问题: publ
我的算法如下所示: Initialize: max_so_far = 0 max_ending_here = 0 Loop for each element of the array
#include #include int MIN = std::numeric_limits::min() using namespace std ; void findMaxSubArray(
应用 Kadane 算法来获得最大乘积子数组似乎很棘手。虽然我能够获得最大乘积,但我并没有真正获得最大乘积子数组的正确范围。 http://www.geeksforgeeks.org/maximum-
我正在尝试解决 hackerrank 问题 - 最大子数组模 - 此处描述 https://www.hackerrank.com/challenges/maximum-subarray-sum/pro
这是 Kadane 算法的 Java 实现,用于查找具有最大和的连续子数组的和。 static int maxSum(int[] arr) { int maxEndingHer
我查找了寻找连续子数组最大和的最优解。还有一种算法叫做 Kadane 算法。这是我在 geeksforgeeks 上找到的伪代码。 Initialize: max_so_far = 0
我一直在尝试获取子数组的最大积的范围(为求职面试而学习)。 这已经在这里问过(但没有提供有效的答案)。 Getting range of max product subarray using Kada
public class Kadane { double maxSubarray(double[] a) { double max_so_far = 0; double max_e
我感觉Kadane的算法是最大子数组问题真动态规划解法的修改版。为什么我这么感觉?我感觉是因为计算最大子数组的方式可以采取: for(i=0;i using namespace std; int DP
我是一名优秀的程序员,十分优秀!