Javascript 卡丹';s算法没有返回最大连续和的正确值?
尝试使用Kadane的算法,如下所述: 在这个数字数组上:Javascript 卡丹';s算法没有返回最大连续和的正确值?,javascript,arrays,algorithm,math,kadanes-algorithm,Javascript,Arrays,Algorithm,Math,Kadanes Algorithm,尝试使用Kadane的算法,如下所述: 在这个数字数组上:[-5,10,2,-3,5,8,-20] 答案是10+2–3+5+8=22 但是,当我运行以下代码时,我得到以下结果: sumArray=[0,20,24,24,28,44,44] 不知道24和更高的数字是如何进入的:(而且22丢失了 代码如下: const myArray = [-5, 10, 2, -3, 5, 8, -20]; const findMaxConsecutiveSum = (arr) => { const
[-5,10,2,-3,5,8,-20]
答案是10+2–3+5+8=22
但是,当我运行以下代码时,我得到以下结果:
sumArray=[0,20,24,24,28,44,44]
不知道24
和更高的数字是如何进入的:(而且22
丢失了
代码如下:
const myArray = [-5, 10, 2, -3, 5, 8, -20];
const findMaxConsecutiveSum = (arr) => {
const sumArray = [];
let max_so_far = 0;
let max_ending_here = 0;
for (let i = 0; i < arr.length; i++) {
max_ending_here = max_ending_here + arr[i];
// console.log('position:', i, arr[i]);
// console.log(max_ending_here = max_ending_here + arr[i]);
// console.log('max_ending_here', max_ending_here);
if (max_ending_here < 0) {
max_ending_here = 0;
}
else if (max_so_far < max_ending_here) {
max_so_far = max_ending_here;
}
// console.log('max_so_far', max_so_far);
sumArray.push(max_so_far);
}
return sumArray;
}
console.log(findMaxConsecutiveSum(myArray));
constmyarray=[-5,10,2,-3,5,8,-20];
常量findMaxConcertivesum=(arr)=>{
常量数组=[];
设max_so_far=0;
让这里的max_end_=0;
for(设i=0;i
我的想法是,我只需填充数组,然后按最大的数字进行过滤。
然而,我没有得到22
,而是得到了大量更大的数字
你知道为什么吗?你让实现变得比需要的复杂得多。从文章开始,代码应该如下所示:
def max_subarray(A):
max_ending_here = max_so_far = A[0]
for x in A[1:]:
max_ending_here = max(x, max_ending_here + x)
max_so_far = max(max_so_far, max_ending_here)
return max_so_far
上面提到的算法需要返回一个数字,而不是一个数组。转换为JS,如下所示:
constmyarray=[-5,10,2,-3,5,8,-20];
常量findMaxConcertivesum=(arr)=>{
设max_so_far=0;
让这里的max_end_=0;
for(设i=0;i console.log(FindMaxConcertivesum(myArray));
您使实现变得比需要的复杂得多。从文章开始,代码应该如下所示:
def max_subarray(A):
max_ending_here = max_so_far = A[0]
for x in A[1:]:
max_ending_here = max(x, max_ending_here + x)
max_so_far = max(max_so_far, max_ending_here)
return max_so_far
上面提到的算法需要返回一个数字,而不是一个数组。转换为JS,如下所示:
constmyarray=[-5,10,2,-3,5,8,-20];
常量findMaxConcertivesum=(arr)=>{
设max_so_far=0;
让这里的max_end_=0;
for(设i=0;i console.log(FindMaxConcertivesum(myArray));
根据我对Kadane算法的理解(从本文),实现它的方法如下:
constmyarray=[-5,10,2,-3,5,8,-20];
log(myArray.reduce((t,v)=>{t.here=Math.max(v,v+t.here);
t、 max=Math.max(t.max,t.here);
返回t;},
{here:0,max:0}][max'];
根据我对Kadane算法的理解(从这篇文章),实现它的方法如下:
constmyarray=[-5,10,2,-3,5,8,-20];
log(myArray.reduce((t,v)=>{t.here=Math.max(v,v+t.here);
t、 max=Math.max(t.max,t.here);
返回t;},
{here:0,max:0}][max'];
谢谢,我缺少的部分是Math.max
谢谢,我缺少的部分是Math.max
谢谢!我知道有一种方法可以使用reduce
来做:)谢谢!我知道有一种方法可以使用reduce
来做到这一点:)