homework_01
一. 程序的架构和思路:
这段求解最大子数组之和的程序使用的主要思想是贪心算法,即每一步求出的都是当前的最优解。
首先这道题要分两种情况来讨论:
1)如果当前的输入中所有的数均为负数时,那么最后的解就是这个数列中最大的负数。
2)第二种情况也是大多数情况,不是都为负数时,就要设置一个临时存储分段和的数sub_sun,然后一步步向后比较,只要sub_sum小于0,就舍弃它,舍弃然后向后重新寻找sub_sum.因为只要子分段和小于零,就一定会对后面的和值产生负影响,因此要舍弃。
二. 写这个程序的心得:
心得就是首先一定要看清题意,这是写一个好程序的基础。
其次,在写程序前要多多思考,不要认为写出来了就可以了。只有努力的写出时间复杂度与空间复杂度都达到最好的程度时,才能算得上是一个好程序。
三. 程序时间消耗与开发效率分析:
写这个程序总共花费的时间是一小时,一次编译通过,没有调试。
然后我在这个程序中为了算出时间,使用了clock函数来计算,但是由于我的测试数据都很小,如下所示,因此大部分的测试数据最后显示的时间都是0.0000s。这点做的还不够好,也是我的一个很大的遗憾。我想把时间显示为纳秒级别的,希望TA能够告诉我如何去实现,(不要显示0ns)谢谢了。
四. 程序运行截图:
程序截图:
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int main()
{
int n;//输入个数
int a[10000];//存储数据
int i;//遍历
int sub_sum=0;//分段和
int maxsum=0;//记录最大分段和
clock_t start,finish;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
scanf("%d",&a[i]);
start=clock();//开始时间
maxsum=a[0];
sub_sum=a[0];
//找出最大分段和
for(i=1;i<n;i++)
{
if(sub_sum<0)
sub_sum=a[i];
else
sub_sum+=a[i];
if(maxsum<sub_sum)
maxsum=sub_sum;
}
finish=clock();//结束时间
printf("%f s\n",(double)(finish-start)/CLOCKS_PER_SEC);//测量时间
printf("%d\n",maxsum);//打印最大分段和
}
return 0;
}

五.我的教材用书
代码大全(第二版)
六.我的github帐号
ehuaa
homework_01的更多相关文章
- Coding 及 git 的工程使用方法
在过去的两周,同学们除了在学习 C 语言之外,还在学习如何利用 git 将自己的代码上传到 coding 中.也有大量的同学,成功的上传了代码.但是,实际上大部分同学的用法都不合理.这里,以一 ...
- 06_Java基础语法_第6天(自定义类、ArrayList集合)_讲义
今日内容介绍 1.自定义类型的定义及使用 2.自定义类的内存图 3.ArrayList集合的基本功能 4.随机点名器案例及库存案例代码优化 01引用数据类型_类 * A: 数据类型 * a: java ...
- 18_集合框架_第18天_集合、Iterator迭代器、增强for循环 、泛型_讲义
今日内容介绍 1.集合 2.Iterator迭代器 3.增强for循环 4.泛型 01集合使用的回顾 *A:集合使用的回顾 *a.ArrayList集合存储5个int类型元素 public stati ...
随机推荐
- 数组 寻找最大的第k个数
int Partion(int asy[],int begin,int end) { int k=begin; int key=asy[end]; for(int i=begin;i<=end; ...
- Linux下拆分大文件
linux split 命令 功能说明:切割文件. 语 法:split [--help][--version][-<行数>][-b <字节>][-C <字节>][- ...
- Windows 7更改SVN账户密码
首先说明下我的系统是Windows7 今天更改了SVN账号和密码,然后想要更改一下Eclipse的SVN登录用户名和密码 但是网上找了一大推说什么客户端的,靠净扯淡. 本人亲测最有效的方法是删除C盘下 ...
- Regex Failure - Bug Fixing #2
http://www.codewars.com/kata/55c423ecf847fbcba100002b/train/csharp Oh no, Timmy's received some hate ...
- openfire的配置
Openfire 采用Java开发,开源的实时协作(RTC)服务器基于XMPP(Jabber)协议.Openfire安装和使用都非常简单,并利用Web进行管理.单台服务器可支持上万并发用户.所以常常被 ...
- maximum-gap(经过了提示)
下面的分桶个数做的不太好,原来的解法是用的 int gap = (big - small) / vlen; if (gap == 0) { gap = 1; } 下面是现在的Java解法: packa ...
- 石子合并(四边形不等式优化dp) POJ1160
该来的总是要来的———————— 经典问题,石子合并. 对于 f[i][j]= min{f[i][k]+f[k+1][j]+w[i][j]} From 黑书 凸四边形不等式:w[a][c]+w[b][ ...
- poj3683 Priest John's Busiest Day
2-SAT. 读入用了黄学长的快速读入,在此膜拜感谢. 把每对时间当作俩个点.如果有交叉代表相互矛盾. 然后tarjan缩点,这样就能得出当前的2-SAT问题是否有解. 如果有解,跑拓扑排序就能找出一 ...
- pinyin4j使用示例
pinyin4j的主页:http://pinyin4j.sourceforge.net/pinyin4j能够根据中文字符获取其对应的拼音,而且拼音的格式可以定制pinyin4j是一个支持将中文转换到拼 ...
- html之marquee详解[转]
该标签不是HTML3.2的一部分,并且只支持MSIE3以后内核,所以如果你使用非IE内核浏览器(如:Netscape)可能无法看到下面一些很有意思的效果该标签是个容器标签语法: <marquee ...