1.子數組的最大累加和問題
題目描述
給定一個數組arr,返回子數組的最大累加和
例如,arr = [1, -2, 3, 5, -2, 6, -1],所有子數組中,[3, 5, -2, 6]可以累加出最大的和12,所以返回12.
[要求]
時間復雜度為
O(n)O(n),空間復雜度為O(1)O(1)
輸入描述:
第一行一個整數N。表示數組長度
接下來一行N個整數表示數組內的元素
輸出描述:
輸出一個整數表示答案
示例1
輸入
7 1 -2 3 5 -2 6 -1
輸出
12
1)創建兩個變量maxsum 和 thissum來分別記錄數組中最大和以及遍歷到目前位置的和
2)首先將maxsum初始化為數組首元素,thissum初始化為0
3)將數組元素與thissum相加,並於maxsum比較,看是否需要更新maxsum
4)判斷thissum是否大於0,如果thissum小於0,那么前面一段數的加入,對於求最大和而言是有副作用的,所以令thissum = 0,將前面一段數據拋棄
#include<bits/stdc++.h> using namespace std; int main(){ int N; cin >> N; vector<int> arr(N); for(int i = 0; i < N; i++){ cin >> arr[i]; } // int maxsum = arr[0]; int thissum = 0; for(int i = 0; i < N; i++){ thissum += arr[i]; if(thissum > maxsum) maxsum = thissum; if(thissum <= 0) thissum = 0; } cout << maxsum <<endl; return 0; }