給定一個整數數組,找到一個具有最大和的子數組,返回其最大和。
注意事項
子數組最少包含一個數
您在真實的面試中是否遇到過這個題?
Yes
樣例
給出數組[?2,2,?3,4,?1,2,1,?5,3],符合要求的子數組為[4,?1,2,1],其最大和為6
class Solution {
public:
/**
* @param nums: A list of integers
* @return: A integer indicate the sum of max subarray
*/
// 注意這種情況是,數組中至少存在一個正數的情況
int maxSubArray(vector<int> nums) {
// write your code here
int sum = 0;
int max_sum = 0;
int max_pos_begin = 0;
int max_pos_end = 0;
int begin = 0;
int end = 0;
int flag = 0;
//考慮到全部都是負數的情況
int neg_flag = 0;
int max_neg = nums[0];
int max_neg_index = 0;
for (int i = 0; i < nums.size(); i++) {
//flag 是一個標志,用來判斷begin是否已經設置
if (nums[i] > 0&&flag==0) {
begin = i;
flag = 1;
}
sum = sum + nums[i];
if (sum < 0) {
sum = 0;
flag = 0;
}
if (sum > max_sum) {
end = i;
max_sum = sum;
max_pos_begin = begin;
max_pos_end = end;
}
if (nums[i] > 0) {
//如果存在一個正數,neg_flag就設置為1
neg_flag = 1;
}
else {
if (nums[i] > max_neg) {
max_neg = nums[i];
max_neg_index = i;
}
}
}
if (neg_flag == 1) {
return max_sum;
}
else {
return max_neg;
}
}
};