剑指offer:js实现连续子数组的最大和

题目:输入一个整型数组,数组里有正数也有负数,数组的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值

思路:

  1. 使用穷举法,把所有的可能列出来
  2. 举例分析规律
    1. 如果累加时发现累加到了一个负数,数字越来越小,则把之前的数存起来,他可能是一个最大值。
    2. 如果累加的和变成了负数,那么应该把这次的和去掉,换一个头
    let arr = [1,2,3,-2,5];
    const findMax = arr => {
        if(!Array.isArray(arr) || arr.length === 0 ){
            //鲁棒性,检测输入数据的正确性
            return false;
        }
        let sum = 0;
        let lastSum = -1;
        for(var i = 0; i<arr.length; i++){
        	//理应当检测数组元素的类型,因为懒
            if(sum<=0){
                sum = arr[i]
            }else{
                sum+=arr[i];
            }
            if(sum > lastSum){
                lastSum = sum;
            }
        }
        return lastSum;
    }

延伸:如果数组为循环数组,即尾部接着头部

思路:循环我们可以构建新数组,长度为原数组两倍,再次调用findMax函数

    const findMax2 = arr => {
        return findMax([...arr,...arr]);
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章