function maxSub( arr ) {
var SubMax = function ( start, end, sum ) {
this.start = start;
this.end = end;
this.sum = sum;
};
SubMax.prototype.set = function ( submax ) {
this.start = submax.start;
this.end = submax.end;
this.sum = submax.sum;
};
SubMax.prototype.subArr = function ( arr ) {
return arr.slice( this.start , this.end + 1 );
};
var beforSubMax = new SubMax( 0, 0, arr[ 0 ] );
var maxSubMax = new SubMax( 0, 0, arr[ 0 ] );
for ( var i = 1 ; i < arr.length ; i++ ) {
var tmp = beforSubMax.sum + arr[ i ];
if ( tmp > arr[ i ] ) {
beforSubMax.sum = tmp;
} else {
beforSubMax.sum = arr[ i ];
beforSubMax.start = i;
}
beforSubMax.end = i;
if ( beforSubMax.sum > maxSubMax.sum ) {
maxSubMax.set( beforSubMax );
}
}
return maxSubMax.subArr( arr );
}
//test you can test this on your web console
var array = [ 1, 3, -8, 9, 3, 13 ];
var result = maxSub( array );
console.log( result );
js 最大子串
最新推荐文章于 2024-06-07 08:24:45 发布