最大子數組
給定一個整數數組,找到一個具有最大和的子數組,返回其最大和。
注意事項
子數組最少包含一個數
您在真實的面試中是否遇到過這個題? Yes
樣例
給出數組[−2,2,−3,4,−1,2,1,−5,3]
,符合要求的子數組爲[4,−1,2,1]
,其最大和爲6
要求時間複雜度爲O(n)
分析:這裏採用貪心法,時間複雜度爲O(n),將子串和爲負數的子串丟掉,只留和爲正的子串。當前和爲負,則再加下去越來越小,所以可以捨棄之前相加的和
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 n=nums.size();
int ans=-1000000;//防止第一個出現很小的數字
int sums=0;
for(int i=0;i<n;i++){
sums+=nums[i];
if(sums>ans)
{
ans=sums;
}
if(sums<0)
{
sums=0;
}
}
return ans;
}
};
時間複雜度爲O(n2)的方法爲
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 n = nums.size();
int ans = -1000000;
for(int i=0; i<n; i++)
{
int sum = 0;
for(int j=i; j<n; j++)
{
sum += nums[j];
if(sum > ans)
{
ans = sum;
}
}
}
return ans;
}
};