算法导论(第三版) Exercises4.2(求最大和子数组的算法优化过程)
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(求最大和子数组的算法优化过程)的更多相关文章
- 算法导论(第三版)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 ...
- 算法导论(第三版)Problems2(归并插入排序、数列逆序计算)
讨论内容不说明,仅提供相应的程序. 2.1:归并插入排序θ(nlgn) void mergeInsertionSort(int a[], int l, int r, int k) { int m; & ...
- 算法导论(第三版)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 ...
- 求数组的子数组之和的最大值II
这次在求数组的子数组之和的最大值的条件下又增加了新的约束: 1.要求数组从文件读取. 2.如果输入的数组很大, 并且有很多大的数字, 就会产生比较大的结果 (考虑一下数的溢出), 请保 ...
- C#中求数组的子数组之和的最大值
<编程之美>183页,问题2.14——求子数组的字数组之和的最大值.(整数数组) 我开始以为可以从数组中随意抽调元素组成子数组,于是就有了一种想法,把最大的元素抽出来,判断是大于0还是小于 ...
- 求数组的子数组之和的最大值III(循环数组)
新的要求:一维数组改成循环数组,只是涉及简单算法,只是拿了小数做测试 想法:从文件读取数组,然后新建数组,将文件读取的数组在新数组中做一下连接,成为二倍长度的数组,然后再遍历,将每次遍历的子数组的和存 ...
- 算法导论 第三章 and 第四章
第三章 渐进的基本O().... 常用函数 % 和 // 转换 斯特林近似公式 斐波那契数 第四章 分治策略:分解(递归)--解决(递归触底)--合并 求解递归式的3种方法: 1:代入法(替代法): ...
- "《算法导论》之‘图’":不带权二分图最大匹配(匈牙利算法)
博文“二分图的最大匹配.完美匹配和匈牙利算法”对二分图相关的几个概念讲的特别形象,特别容易理解.本文介绍部分主要摘自此博文. 还有其他可参考博文: 趣写算法系列之--匈牙利算法 用于二分图匹配的匈牙利 ...
- 算法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 ...
随机推荐
- Object-C 类定义 -- 笔记
OC类分为两个文件,一个是.h文件,一个是.m文件 .h文件 存放类,函数的申明 .文件 存放类的具体实现 类申明使用关键字 @interface @end来申明 类实现使用关键字@implement ...
- AngularJs学习笔记6——四大特性之依赖注入
压缩工具:YUI-compressor 为了优化网页功能,对一些脚本文件进行压缩,比如:删除所有的注释和空格等,简化形参.但是AngularJs模块中可以声明多种组件,如控制器.指令.过滤器.服务等. ...
- 关于AppStore上传相关问题
1.电脑本地证书CertificateSigningRequest.certSigningRequest一定要一致(包括开发者证书,尤其是发布证书要一致,否则无法正常上传),此类错误Xcode一般会提 ...
- android .9.png ”点九” 图片制作方法
“点九”是andriod平台的应用软件开发里的一种特殊的图片形式,文件扩展名为:.9.png 智能手机中有自动横屏的功能,同一幅界面会在随着手机(或平板电脑)中的方向传感器的参数不同而改变显示的方向, ...
- 浅析 MySQL Replication(本文转自网络,非本人所写)
作者:卢飞 来源:DoDBA(mysqlcode) 0.导读 本文几乎涵盖了MySQL Replication(主从复制)的大部分知识点,包括Replication原理.binlog format.复 ...
- 自定义View-6 状态按钮 滑动 点击
View public class SwitchButton extends View implements OnClickListener, OnTouchListener { privat ...
- OpenSuse下编译MonoDevelop
当访问Monodevelop.com官网下载的安装包,安装后,发现并不是最新版.在OpenSuse下载的是3.0版本.根据官网的指示,可以自己下载源码进行编译.按官网的指引: 1. $ git clo ...
- Web ADF 编程步骤.
从Web Controls 开始(工具来中的 ArcGIS Web Controls). 访问Resource Manager. 找到待访问的 Resource. 决定 Resource支持哪个 Fu ...
- iOS_SN_CoreData数据迁移
最开始使用CoreData的时候碰到一个问题,就是当增加一个字段的时候再次运行APP会发生崩溃,一开始不知道什么原因,只知道是里面的表结构发生改变,就重新删掉APP再次安装是可以运行的,这样调试完后觉 ...
- MySQL 使用索引扫描来做排序
MySQL有两种方式可以生成有序的结果:通过排序操作:或者按照索引顺序扫描:如果EXPLAIN 出来的结果的type列的值为“index”,则说明MySQL使用了索引扫描来做排序(不要和Extra列的 ...