这个作业要求在哪里 | 作业要求 |
---|---|
我在这个课程的目标是 | 实现求数组中最大子数组的和 |
此作业在哪个具体方面帮我实现目标 | 实现了对代码进行单元测试 |
其他参考文献 | 参考文献 |
作业正文 |
正文
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;
}
};
单元测试
博客作业
大一开始接触计算机的学习并学习了MS office和c语言,其中MS office主要是一个办公工具,学起来也比较简单,易操作。通过对c语言的学习,我第一次知道了我们使用的手机软件都是通过一行行的代码实现的,虽然c语言学起来相对较难,但是在学期结束后自己也已经可以编写一些简单的程序了。大二开始学习了Java语言和数据结构,Java语言和c语言都是面向对象语言,都使用了面向对象的思想(封装、继承、多态),不过Java语言中没有指针的概念,不支持多重继承,但Java语言中引入了接口的概念,可以同时实现多个接口,在Java语言的学习中了解了如何做图形界面。通过对数据结构的学习,明白了什么是队列、栈、链表、树、图等,对指针进行了进一步理解。大三学习了数据库、操作系统、ASP.NET,学习了更为复杂的代码编写、数据库的连接以及网站的建立,学习了如何建立一个简单的聊天室网站,了解了什么是三层架构。这两年多虽然学习很多计算机的知识,但是自己并不能将它们很好的联系起来,复杂的代码并不能自己写出来。在大学的前两年学习过c++、java、matlab等程序设计语言,计算机相关课程接触过数据结构、操作系统、asp网页设计、数据库。 基本停留在基础阶段,没有深入的研究,仅能够解决一些小问题。数据结构也仅仅停留在书本知识层面,对于实际应用没有概念。 目前仍在学习中,希望学习matlab等一些模型建立知识,以及尝试学习一些数据挖掘方面的知识。