本问题是一个求最大子序列的动态规划问题,现在用C++语言处理,并讲述一些语法问题
#include<vector>
using std::vector;
class Solution {
public:
int maxSubArray(vector<int>& nums) {
if (nums.size() <= 0) return -1;
int maxSum = nums[0];
int *dp = new int[nums.size()];
dp[0] = nums[0];
for (int i = 1; i < nums.size(); ++i) {
if (dp[i - 1] < 0) {
dp[i] = nums[i];
}
else {
dp[i] += nums[i];
}
if (maxSum < dp[i]) maxSum = dp[i];
}
return maxSum;
}
};
void main() {//由于C++的类也是一个由分号结束的语句,所以主函数main不能写在类里面,否则找不到入口
Solution *s = new Solution(); //堆区申请存储地址,*s对象不会结束自己的生命。你必须手动调用delete s;如果不调用delete,则会造成内存泄漏
vector<int> *nums = new vector<int>({ 1,-2,9,-20,6 });
int a = s->maxSubArray(*nums);
Solution sb; //在栈区申请对象实例的空间,当函数执行结束后,sb会自动调用Solution的析构函数,结束自己的生命
sb.maxSubArray(*nums);
printf("%d", a);
system("pause");
delete s;
}
网友评论