4.1-1

如所有元素都为负,则返回所有元素中最大的负数。

4.1-2(暴力法求最大和子数组)

struct subarray
{
int start, end, sum;
};
void bruteFindMaxSubarray(int a[], int left, int right, struct subarray* result)
{
int i, j, sum=a[left];
int tempSum;
int l = left;
int r = l;
for(i=left; i<=right; i++)
{
tempSum = a[i];
for(j=i+; j<=right; j++)
{
tempSum += a[j];
if(tempSum > sum)
{
l = i;
r = j;
sum = tempSum;
}
}
}
result->start = l;
result->end = r;
result->sum = sum;
}

4.1-3(归并算法求最大和子数组)

int mergeFindSub(int a[], int l, int r, int result[])
{
int i, j, k, mid;
int leftSum = ;
int rightSum = ;
int crossSum = ;
int leftResult[] = {};
int rightResult[] = {};
int crossResult[] = {};
if(l == r)
{
result[] = l;
result[] = r;
result[] = a[l];
}
else
{
mid = (l + r) / ;
leftSum = mergeFindSub(a, l, mid, leftResult);
rightSum = mergeFindSub(a, mid+, r, rightResult);
crossSum = crossingSub(a, l, mid, r, crossResult);
if(leftSum >= rightSum && leftSum >= crossSum)
for(i=; i<; i++) result[i] = leftResult[i];
else if(rightSum >= leftSum && rightSum >= crossSum)
for(j=; j<; j++) result[j] = rightResult[j];
else
for(k=; k<; k++) result[k] = crossResult[k];
}
return result[];
} int crossingSub(int a[], int l, int m, int r, int result[])
{
int i, j, leftSum, rightSum, sum;
int min = -;
rightSum = min;
leftSum = min;
sum = ;
for(i=m; i>=l; i--)
{
sum += a[i];
if(sum > leftSum)
{
result[] = i;
leftSum = sum;
}
}
sum = ;
for(j=m+; j<=r; j++)
{
sum += a[j];
if(sum > rightSum)
{
result[] = j;
rightSum = sum;
}
}
result[] = leftSum + rightSum;
return result[];
}

4.1-4

如果允许空串,只要加一句

if (sum < 0)  return sum=0;

4.1-5(线性算法求最大和字串)

void linearFindSub(int a[], int n, int result[])
{
int i, l, temp, sum;
int min = -;
sum = min;
temp = ;
l = ;
for(i=; i<n; i++)
{
if(temp < )
{
temp = a[i];
l = i;
}
else
temp += a[i];
if(sum < temp)
{
result[] = l;
result[] = i;
sum = temp;
}
}
result[] = sum;
}

算法导论(第三版) Exercises4.2(求最大和子数组的算法优化过程)的更多相关文章

  1. 算法导论(第三版)Exercises2.3(归并排序、二分查找、计算集合中是否有和为X的2个元素)

    2.3-1: 3 9 26 38 41 49 52 59 3 26 41 52   9 38 49 57 3 41   52 26   38 57   9 49 3   41  52  26  38  ...

  2. 算法导论(第三版)Problems2(归并插入排序、数列逆序计算)

    讨论内容不说明,仅提供相应的程序. 2.1:归并插入排序θ(nlgn) void mergeInsertionSort(int a[], int l, int r, int k) { int m; & ...

  3. 算法导论(第三版)Exercises2.1(插入排序、线性查找、N位大数相加)

    关于练习程序的说明参见置顶的那篇. 2.1-1: 31 41 59 26 41 58 31 41 59 26 41 58 31 41 59 26 41 58 26 31 41 59 41 58 26 ...

  4. 求数组的子数组之和的最大值II

    这次在求数组的子数组之和的最大值的条件下又增加了新的约束:  1.要求数组从文件读取.      2.如果输入的数组很大,  并且有很多大的数字,  就会产生比较大的结果 (考虑一下数的溢出), 请保 ...

  5. C#中求数组的子数组之和的最大值

    <编程之美>183页,问题2.14——求子数组的字数组之和的最大值.(整数数组) 我开始以为可以从数组中随意抽调元素组成子数组,于是就有了一种想法,把最大的元素抽出来,判断是大于0还是小于 ...

  6. 求数组的子数组之和的最大值III(循环数组)

    新的要求:一维数组改成循环数组,只是涉及简单算法,只是拿了小数做测试 想法:从文件读取数组,然后新建数组,将文件读取的数组在新数组中做一下连接,成为二倍长度的数组,然后再遍历,将每次遍历的子数组的和存 ...

  7. 算法导论 第三章 and 第四章

    第三章 渐进的基本O().... 常用函数 % 和  // 转换 斯特林近似公式 斐波那契数 第四章 分治策略:分解(递归)--解决(递归触底)--合并 求解递归式的3种方法: 1:代入法(替代法): ...

  8. "《算法导论》之‘图’":不带权二分图最大匹配(匈牙利算法)

    博文“二分图的最大匹配.完美匹配和匈牙利算法”对二分图相关的几个概念讲的特别形象,特别容易理解.本文介绍部分主要摘自此博文. 还有其他可参考博文: 趣写算法系列之--匈牙利算法 用于二分图匹配的匈牙利 ...

  9. 算法Sedgewick第四版-第1章基础-002一些工具类算法(Euclid’s algorithm)

    1. //Euclid’s algorithm public static int gcd(int p, int q) { if (q == 0) return p; int r = p % q; r ...

随机推荐

  1. javascript中子类如何继承父类

    参考阮一峰的文章:http://javascript.ruanyifeng.com/oop/inheritance.html#toc4 function Shape() { this.x = 0; t ...

  2. sublime3 使用技巧

    Ctrl+O(Command+O)可以实现头文件和源文件之间的快速切换 Ctrl+Shift+T可以打开之前关闭的tab页,这点同chrome是一样的 Ctrl+R定位函数:Ctrl+G定位到行: 插 ...

  3. mnist数据集转换bmp图片

    Mat格式mnist数据集下载地址:http://www.cs.nyu.edu/~roweis/data.html Matlab转换代码: load('mnist_all.mat'); type = ...

  4. 基于年纪和成本(Age & Cost)的缓存替换(cache replacement)机制

    一.客户端的缓存与缓存替换机制 客户端的资源缓存: 在客户端游戏中,通常有大量的资源要处理,这些可能包括贴图.动作.模型.特效等等,这些资源往往存在着磁盘文件->内存(->显存)的数据通路 ...

  5. Linux下那些奇葩的命令

    相信喜爱编程,痴迷技术的你,肯定接触过甚至深爱着linux,甚至可能已经很熟悉linux了,可是linux那逗比的一面,你又知道多少. 本文!纯粹娱乐!不喜勿喷! 1.程序猿的愤慨! yes 当我们再 ...

  6. IE6下的怪异解析知识点补充

    转载请注明出处:HTMl5自由者      

  7. MongoDB每64位版本下载

    MongoDB每64位版本下载: http://dl.mongodb.org/dl/win32/x86_64 版权声明:本文博主原创文章,博客,未经同意不得转载.

  8. 设计模式(3)-对象创建型模式-Abstract Factory模式

    1.对象创建型模式 1.3           Abstract Factory模式 1.3.1 需求 在下面情况能够使用Abstract Factory模式: •  一个系统要独立于它的产品的创建. ...

  9. JNI(5)The Invocation API

    调用API允许软件提供商加载Java VM 到任意的本地应用中.供应商可以提供支持Java的应用程序而无需链接Java VM的代码. 概述 下面代码展示了通过调用API如何使用函数.这个例子中C++代 ...

  10. 用MVC4练习,后台用aspx,数据库DemoDb《MvcUserDemo》

    将ado.net的cs文件SqlHelper.cs放入解决方案 using System; using System.Collections.Generic; using System.Linq; u ...