劍指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]);
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章