這個作業要求在哪里 | 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等項目技能,對我的編程能力有了很大的提升,但是這些技能我都還處於入門階段,距離登堂入室還有一段距離。還需要在接下來一年多的學習中,增加自己的個人能力,多學多做才能有所進步。