前端算法实现 —— 最大(最小)子序列

需求:给定一个整数数组,找到一个具有最大和(最小和)的子数组,返回其最大和(最小和) 

如数组:[-1,1,2,3,-2,-1,4],最大和子数组[1,2,3],最大和:7

最小和子数组[-2,-1],最小和:-3   (源于一个同学的面试题,他不说我都忘了我刷过这道题了)

附上代码: 

var func = function (arr) {
    let max = min = 0;
    let res_min = res_max = 0;
    for (let i = 0; i < arr.length; i++) {
        // 维护当前最大(最小)数组和
        if (max > 0) {
            max = max + arr[i];
        } else {
            max = arr[i];
        }

        if (min < 0) {
            min = min + arr[i];
        } else {
            min = arr[i];
        }
        res_min = Math.min(res_min, min);
        res_max = Math.max(res_max, max);
    }

    console.log("最大子数组和为" + res_max);
    console.log("最小子数组和为" + res_min);
};

func([-1, 1, 2, 3, -2, -1, 4]);
func([5, -1, 4]);

时间复杂度O(n),范畴应该属于动态规划,思路是维护当前最大数组和、最小数组和

你可能感兴趣的:(前端算法实现 —— 最大(最小)子序列)