0% found this document useful (0 votes)
9 views3 pages

The_Maximum_Subarray.cpp

Uploaded by

dotienloc2005
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
9 views3 pages

The_Maximum_Subarray.cpp

Uploaded by

dotienloc2005
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 3

#include <bits/stdc++.

h>

using namespace std;

string ltrim(const string &);


string rtrim(const string &);
vector<string> split(const string &);

/*
* Complete the 'maxSubarray' function below.
*
* The function is expected to return an INTEGER_ARRAY.
* The function accepts INTEGER_ARRAY arr as parameter.
*/
int maxSubsequenceSum(vector<int> nums) {
int sum = 0;
int max_val = nums[0];
for (int num : nums) {
if (num > 0) {
sum += num;
}
max_val = max(num, max_val);
}
if (sum > 0) {
return sum;
}
return max_val;
}

int maxSubArraySum( vector<int> nums) {


int max_current = nums[0];
int max_global = nums[0];

for (int i = 1; i < nums.size(); ++i) {


max_current = max(nums[i], max_current + nums[i]);
max_global = max(max_global, max_current);
}

return max_global;
}

vector<int> maxSubarray(vector<int> arr) {


return {maxSubArraySum(arr), maxSubsequenceSum(arr)};
}

int main()
{
ofstream fout(getenv("OUTPUT_PATH"));

string t_temp;
getline(cin, t_temp);

int t = stoi(ltrim(rtrim(t_temp)));

for (int t_itr = 0; t_itr < t; t_itr++) {


string n_temp;
getline(cin, n_temp);

int n = stoi(ltrim(rtrim(n_temp)));
string arr_temp_temp;
getline(cin, arr_temp_temp);

vector<string> arr_temp = split(rtrim(arr_temp_temp));

vector<int> arr(n);

for (int i = 0; i < n; i++) {


int arr_item = stoi(arr_temp[i]);

arr[i] = arr_item;
}

vector<int> result = maxSubarray(arr);

for (size_t i = 0; i < result.size(); i++) {


fout << result[i];

if (i != result.size() - 1) {
fout << " ";
}
}

fout << "\n";


}

fout.close();

return 0;
}

string ltrim(const string &str) {


string s(str);

s.erase(
s.begin(),
find_if(s.begin(), s.end(), not1(ptr_fun<int, int>(isspace)))
);

return s;
}

string rtrim(const string &str) {


string s(str);

s.erase(
find_if(s.rbegin(), s.rend(), not1(ptr_fun<int, int>(isspace))).base(),
s.end()
);

return s;
}

vector<string> split(const string &str) {


vector<string> tokens;

string::size_type start = 0;
string::size_type end = 0;
while ((end = str.find(" ", start)) != string::npos) {
tokens.push_back(str.substr(start, end - start));

start = end + 1;
}

tokens.push_back(str.substr(start));

return tokens;
}

You might also like