- 论坛徽章:
- 0
|
回复 8# zhanglistar
8楼的代码在计算startindex(子数组开始位置)和len(子数组长度)时有错误,比如
int a[] = {1, 1, -3, -3, -4, 3, 4, -8, 2, 3};时 会一直进入 (sum<0)分支,startindex被错误的增加了。
对代码做了些修正
- #include <stdio.h>
- int main()
- {
- int a[] = {1, 1, -3, -3, -4, 3, 4, -8, 2, 3};
- /*int a[] = {9, -12, 120, 8, -20, 100, 30, -89, 20};*/
- int start; /* 子数组开始下标 */
- int temp_start; /* */
- int len; /* 子数组长度 */
- int sum; /* 临时计数 */
- int max; /* 子数组的和 */
- int i;
- start = len = sum = max = temp_start = 0;
- for(i = 0; i < sizeof(a)/sizeof(a[0]); i ++)
- {
- sum += a[i];
- if(sum < 0)
- {
- temp_start = i + 1; /* 从下一个数组元素开始重新计算 */
- sum = 0;
- }
- if(sum > max)
- {
- start = temp_start; /* 发现比之前记录的子数组最大值要大的连续元素,替换开始位置 */
- max = sum; /* 替换最大值 */
- len = i - start + 1; /* 计算子数组长度 */
- }
- }
- printf("start = %d, len = %d, max = %d\n", start, len, max);
- return 0;
- }
复制代码 |
|