终于快过完二柱的四则运算题目了,数组起头了
题目:返回一个整数数组中最大子数组的和。 要求: 输入一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。要求时间复杂度为O(n) 发表一篇博客文章讲述设计思想,出现的问题,可能的解决方案(多选)、源代码、结果截图、总结。
吸取教训,先整理好思路再进行编写
首先想到了很笨的方法,定义一个数组a用来存放子数组含1,2,3...个元素时的最大值,然后分别计算从a[0]开始元素子数组含(1~数组最大值)的和,再在数组a中进行比较找出最大值,后来又想出一个看似稍微简化一点的方法:依次找到数组的最大元素、次大元素...最小元素,找到的同时进行子数组的求和,和的最大值再放入数组a中(经过检验好像比一开始想出来的方法难),时间复杂度先不考虑(已经嵌套好几层括号o(╯□╰)o)
***************************************************************************************************************************
嵌套关系有点混乱了,能出来一个元素和两个元素子数组的和最大值,改了又出不来了,附上代码,脑袋已经乱了,明天理清楚继续,好像错误是未初始化,而且少了东西,
~~~~(>_<)~~~~
#include<iostream> using namespace std; int Max(int a[100], int i, int num); int main() { cout << "请输入数组元素个数:"; int num; cin >> num; cout << "请输入数组元素:"; int array_[100],i,j,far,k=0; int a[100]; for (i = 0; i < num; i++) cin >> array_[i]; //从前到后依次求子数组和的最大值 for (i = 0; i < num; i++) { for (far = 0; far < num - i; far++) //定义到计算元素的距离(含几个元素的子数组) { for (j = i; j < i + far; j++) //加的次数 { int m=0; m = m + array_[j]; //m存放子数组的和 int a[100]; } } } cout << Max(a, k, i*i+i) << " "; return 0; } //求数组最大值 int Max(int a[100],int i,int num) { int M=a[0]; for (i = 0; i < num; i++) { if (a[i] > M) M = a[i]; } return M; }