【现代程序设计】homework-01
HOMEWORK-01
1) 建立 GitHub 账户, 把课上做的 “最大子数组之和” 程序签入
已完成。
2) 在 cnblogs.com 建立自己的博客。 写博客介绍自己的 GitHub 账户. 并把博客地址写到这个博客的留言。这样TA 可以收集信息
github:Lmeng;
已将信息发送到TA邮箱。
3) 搞到一本教科书 (三本中选一本), 并在博客中说明自己选的是哪一本
中文版 代码大全 (第二版) 斯蒂夫·迈克康奈尔 ISBN: 7121022982
4) 阅读下面的博客:
- 个人软件开发流程: Personal Software Process,
- 程序效能分析
- 单元测试 (在最小的编程单元上保证正确性) & 回归测试 (保证程序在修改的过程中, 原有的功能保持稳定 )
- 技能的反面
仔细地阅读了一下这几篇文章,对自己确实有很大启发。其中所提到的效能分析是一个非常棒的方法,可以让程序员知道自己这段程序写得到底怎么样,可以在哪个部分进行优化。还有针对于自己,我还需要抓紧时间、加大努力解决低层次的问题,努力解决中层次的问题,让自己在用有限的时间花在高层次问题上。
5) 在自己的博客上描述自己是怎么设计 “最大子数组之和”这个程序的, 和正确的解法有哪些差距。
算法:贪心算法;
思路:最大子数组的子数组之和一定不大于该最大子数组之和。在该最大子数组中,前m个数和都不小于0。所以采用“过程”所描述的方法即可得到正确结果。
证明:最大子数组Array[n...m]的前i个数和都不小于0。m=0,1,2...m-n+1;
假设最大子数组为Array[n...m],有子数组Array[n...j],其和小于0,其中,n<j<m,下面用array[p,k]直接表示array[p]+array[p+1]+...+array[k]
由于Array[n...j] +Array[j...m] = Array[n...m]
如果Array[n...j]<0
那么Array[j...m]>Array[n...m]
所以Array[n...m]不是最大子数组。因此不存在Array[n...j]<0.得证。
过程:
1、从第一个数开始扫描数组(Array[1...n]),用tmpMaxSeq记录当前和(tmpMaxSeq = Array[1]+Array[2]+...)。
2、当tmpMaxSeq<0, 将它置0,
3、从下一个位置开始继续扫描数组。过程中出现的最大的tmpMaxSeq即为最大子数组之和。
复杂度:O(n)
心得体会:这个程序,如果想好了算法,实现起来还是比较简单的。
时间和效率分析:完成此次全部作业在1个小时左右。效率较高。
测试结果截屏(部分)

【现代程序设计】homework-01的更多相关文章
- 阅读摘录《javascript 高级程序设计》01
前言: 因为工作需要,所以开始主攻前台JS方面的技术.在以前的工作中,使用过这门脚本语言.但是都是比较凌乱的,用到什么学什么,只是为了实现业务,而去使用. 不会考虑到代码优化,封装对象等.今次特意借了 ...
- javascript高级程序设计--笔记01
概述 JavaScript的实现包含三个部分: 1 核心(ECMAScript) 提供核心语言功能 2 文档对象模型(DOM) 一套提供了访问以及操作网页内容的API 3 浏览器对象模型( ...
- 标准C程序设计七---01
Linux应用 编程深入 语言编程 标准C程序设计七---经典C11程序设计 以下内容为阅读: <标准C程序设计>(第7版) 作者 ...
- 现代程序设计homework——04
题目: 详见:http://www.cnblogs.com/xinz/p/3341551.html 题目本身确实很难,“很难想到一个比较优雅的算法”,这是一个老师请来专门讲解这道题的大牛的原话.确实, ...
- Using Vertex Texture Displacement for Realistic Water Rendering
http://blog.csdn.net/soilwork/article/details/709869 Using Vertex Texture Displacement for Realistic ...
- 软工+C(9): 助教指南,持续更新...
上一篇:提问与回复 下一篇:从命令行开始逐步培养编程能力(Java) 目录: ** 0x00 Handshake ** 0x01 点评 ** 0x02 评分 ** 0x03 知识储备 ** 0x04 ...
- 20145218 《Java程序设计》第01次实验报告
北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1452 指导教师:娄嘉鹏 实验日期:2016.04.08 实验名称:Java开发环境的熟悉(Linux + Eclipse) 实 ...
- 01 C语言程序设计--01 C语言基础--第1章 C语言概述&第2章 GCC和GDB
走进嵌入式开发的世界,企业级项目课程让你达到企业嵌入式应用开发要求.名师在线答疑,解决疑难.科学评测体系,系统评估学习.核心项目实........ 30 门课程 241小时12分钟 824 人学习 学 ...
- 20145219 《Java程序设计》第01周学习总结
20145219 <Java程序设计>第01周学习总结 教材学习内容总结 软件分类:系统软件(DOS.Windows.Linux等).应用软件(扫雷.QQ等) 人机交互方式:图形化界面.命 ...
- HDU 6113 度度熊的01世界 【DFS】(2017"百度之星"程序设计大赛 - 初赛(A))
度度熊的01世界 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
随机推荐
- vector的几种初始化和遍历
随着C++11标准的出现,vector出现了新的初始化和遍历用法,但是vs2010和较高版本并没有能完全支持C++11标准,所以我就将它的所有的用法归纳了一下. vector的初始化 vector基本 ...
- C#自制png转ico图标工具
此项目基于.net framework 4.0 只需把图片拖拽到窗口内,自动转换生成ico图标,在png文件同级目录下. /// /// 实现代码: 转换Image为Icon /// ///要转换为图 ...
- Ray-AABB交叉检测算法
最近在解决三维问题时,需要判断线段是否与立方体交叉,这个问题可以引申为:射线是否穿过立方体AABB. 在3D游戏开发中碰撞检测普遍采用的算法是轴对齐矩形边界框(Axially Aligned ...
- Velocity中加载vm文件的三种方式
Velocity中加载vm文件的三种方式: a. 加载classpath目录下的vm文件 /** * 初始化Velocity引擎 * --VelocityEngine是单例模式,线程安全 * @th ...
- 2.Netty的粘包、拆包(一)
Netty粘包.拆包 1.什么是拆包.粘包 (1)拆包.粘包介绍 TCP是个"流"协议,所谓流,就是没有界限的一串数据.大家可以想想河里的流水,是连成一片的,其间并没有分界线.TC ...
- cursor 在某一操作之前打开 fetch cursorname into var1
工作中遇到这样一个问题,在一个存储过程中,我想让一个游标在某一操作之前打开,说白了操作会影响我游标中已定义好的数据,这里我们用到游标的第二种用法,代码如下 cursor c_relation is s ...
- ios中的三种弹框
目前为止,已经知道3种IOS弹框: 1.系统弹框-底部弹框 UIActionSheet (1)用法:处理用户非常危险的操作,比如注销系统等 (2)举例: UIActionSheet *sheet = ...
- 微信小程序之setData原理以及几点关于小程序的吐槽
小程序不方便之处: 1: 想做个获取列表中每个item所在的对应滚动条的高度在哪里,或者元素本身的高度也不好获取,极其不方便,网上看的别人做的滚动条相关的,都是写死或者已知的item高度,目前没找到正 ...
- 使用ansible安装配置zabbix客户端
ansible角色简介: 目录名 说明 defaults 默认变量存放目录 handlers 处理程序(当发生改变时需要执行的操作) meta 角色依赖关系处理 tasks 具体执行的任务操作定义 t ...
- 【CodeBase】PHP将数组键名转成变量名
<?php /** * php 把数组中的键名所为变量名键值作为变量名 */ $arr=array('a'=>1,'b'=>2,'c'=>3,'d'=>5,'e'=> ...