计算与软件工程作业三
这个作业要求在哪里 | https://edu.cnblogs.com/campus/jssf/infor_computation17-31/homework/10454 |
---|---|
我在这个课程的目标是 | 实现求数组中最大子数组的和。 |
此作业在哪个具体方面帮我实现目标 | 实现类,测试运行 |
其他参考文献 | https://blog.csdn.net/BillCYJ/article/details/79761039 |
作业正文 | 码云:https://gitee.com/yuanaj/yaj1355 |
正文:
class Solution {
public:
int maxSubArray(vector<int> &nums) {
int begin = 0, end = nums.size() - 1;
return maxArray(nums, begin, end);
}
int maxArray(vector<int> &nums, int begin, int end){
if (begin == end)
return nums[begin];
int mid = (begin + end) >> 1;
int m1 = maxArray(nums, begin, mid);
int m2 = maxArray(nums, mid + 1, end);
// 从中向左地寻找最大和
int i, left = nums[mid], now = nums[mid];
for (i = mid-1; i >= begin; i--){
now+= nums[i];
left = max(now, left);
}
int right = nums[mid + 1];
now = nums[mid + 1];
for (i = mid+2; i <= end; i++){
now += nums[i];
right = max(right, now);
}
int m3 = left + right;
return max(m1, max(m2, m3));
}
int maxSubArray(vector<int> &nums) {
int result = nums[0], sum = nums[0];
int len = nums.size();
for (int i = 1; i < len; i++){
if (sum > 0)
sum += nums[i];
else
sum = nums[i];
if (result < sum)
result = sum;
}
return result;
}
};
码云:https://gitee.com/yuanaj/yaj1355
在信息与计算科学专业前两年的学习经历中,学习了如c++,Java,matlab等项目技能,对我的编程能力有了很大的提升,但是这些技能我都还处于入门阶段,距离登堂入室还有一段距离。还需要在接下来一年多的学习中,增加自己的个人能力,多学多做才能有所进步。