思路:
這個題一開始沒有思路,後來看了其他人的**才自己逐步理解的
1.因為向量在有負數的情況的下,應該可以看做:正1(包括多個數),負1(也可能包括多個數),正2,負2,正3......
2.所以將開始的值設為sum,然後一步步往後加,若是sum一直大於0,就一直往下加,若是小於0,就代表遍歷了正1,負1,結果是負的,那就放棄前面的正1,負1,因為加上它們肯定會使結果變小(也有人可能認為是正1,負1,正2,負2等等等等,若是這樣想的話,那說明正1,負1之後結果是大於0的,加上了正2,負2之後結果才變負了,只能說明正2,負2的結果負的程度更大,同樣需要被拋棄)
3.放棄前面的部分後,再重新開始計算,重新設定sum為放棄部分的後乙個值,接著進行上面的程序。
4.也許有人會說,若是把前面的拋棄了,結果後面的數值更小怎麼辦?這樣的話我們不就把正確答案給扔掉了嗎?此時,就是變數max發揮作用的時候了。我們一直保持使max儲存迄今為止的最大值。
classsolution
else
if(sum>max)
}return
max;
}};
劍指Offer 30 連續子陣列的最大和
題目 輸入乙個整型陣列,陣列裡有正數也有負數。陣列中乙個或連續的多個整數組成乙個子陣列。求所有子陣列的和的最大值。要求時間複雜度為o n 如輸入陣列 1,2,1,0,3,9 輸出3。我在美團的二面碰到了這道題,當時的想法是不斷構建可變陣列,與預設值即全部元素和比較,得出結果,複雜度o n 2 面試官...
劍指offer 30 連續子陣列的最大和
hz偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了 在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊的正數會彌補它呢?例如 連續子向量的最大和為8 從第0個開始,到第...
劍指offer 30 連續子陣列的最大和
hz偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了 在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊的正數會彌補它呢?例如 連續子向量的最大和為8 從第0個開始,到第...