上一章已经说过利用数学思想来解决程序算法问题,实际上就是找规律。这在我们上学时经常遇到,比如给出一段数字,求某一个位置该填写什么数,只要找到规律那就迎刃而解。好了,废话不多说,再来看看案例分析。

        示例:计算1+2+3+4+5+6+……+100的结果。这个示例算是比较简单了,主要是让大家能够理解这种思想。可能按照多想人的想法要这样做,直接一个循环累加不就完了吗?于是第一种解法就出来了。
         传统方法 :循环累加,一个for就OK。如:
	public static int oneMethod(int index) {
int sum = 0;
if (index <= 0) {
return 0;
}
// 循环区间累加
for (int i = 1; i <= index; i++) {
sum += i;
}
return sum;
}

可能还有的人会用递归算法来解决。如:

	public static int twoMethod(int index) {
if (index <= 0) {
return 0;
}
return twoMethod(index - 1) + index;
}

上面两种方法虽然都解决了问题,但是我认为这不是最好的解法。当index很大的时候,程序肯定吃不消的。而这样的数列甚至不用思考,完全是初中就学过的等差数列。对于1+2+3+4+5+6+……+100数列,都满足于(首项+末项)*项数/2,也就是n(n+1)*项数。不用循环也不用递归,一个公式就能解决问题了。
数学思想:

	public static int threeMethod(int index) {
if (index <= 0) {
return 0;
}
return index * (index + 1) / 2;
}
        既简单又容易理解,而且效率占优。这样的程序能不是好程序吗?
        再来一个例子:1-2+3-4+5-6+……-100的结果。这样的数列也是经常见到的。而且当n是偶数的算法和当n是奇数的时候算法都不一样。
        当n是偶数时:满足-n/2的计算公式;当n是奇数时:满足(1+n)/2的计算公式。

所以最终的解法要用三目运算判断返回的结果。如:

	public static int calcRangeResult(int index) {
if (index <= 0) {
return 0;
}
return index % 2 == 0 ? calcRangeResult(index - 1) - index
: calcRangeResult(index - 1) + index;
}

是不是 so easy呀。

java算法-数学之美二的更多相关文章

  1. java算法-数学之美一

    巧用数学的思想来解决程序算法问题,这样的代码如诗般优美.通过数学思想来看问题,也能将程序简单化.“斐波那契数列”对于java程序员来说一定不陌生.当然这个问题的解决方案也有很多.用一个例子说明数学思想 ...

  2. 算法是什么(二)手写个链表(java)

    算法是什么(二)手写个链表(java)   liuyuhang原创,未经允许禁止转载 目录 算法是什么(〇) 很多语言的API中都提供了链表实现,或者扩展库中实现了链表. 但是更多的情况下,Map(或 ...

  3. 201871010136-赵艳强《面向对象程序设计(java)》第十二周学习总结

    201871010136-赵艳强<面向对象程序设计(java)>第十二周学习总结   项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh ...

  4. 数学之美 zt

    数学是美丽的,哪里有数哪里就有美. 数学的定义是研究数量关系和空间形式的一门科学.但有句名言说:数学比科学大得多,因为它是科学的语言.数学不仅用来写科学,而且可用来写人生.所以说数学是一切学科的基础, ...

  5. Java 算法(一)贪心算法

    Java 算法(一)贪心算法 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 一.贪心算法 什么是贪心算法?是指在对问题进行求 ...

  6. java基础-引用数据类型之二维数组(Array)

    java基础-引用数据类型之二维数组(Array) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 之前我们学习过了Java的一维数组,所谓的二维数组就是元素是一堆一维数组的数组,换 ...

  7. Java 设计模式系列(十二)策略模式(Strategy)

    Java 设计模式系列(十二)策略模式(Strategy) 策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以 ...

  8. Java算法之“兔子问题”

    package wulj; /** * Java算法之“兔子问题”: * 有一只兔子,从出生后第3个月起每个月都生只兔子,小兔子长到第三个月后每个月又生一只兔子,假如兔子都不死,问每个月的兔子总数为多 ...

  9. 201871010123-吴丽丽《面向对象程序设计(Java)》第十二周学习总结

    201871010123-吴丽丽<面向对象程序设计(Java)>第十二周学习总结 项目 内容 这个作业属于哪个课程  https://www.cnblogs.com/nwnu-daizh/ ...

随机推荐

  1. 【菜鸟也疯狂UML系列】——浅析UML四种关系

    在UML中.关系是很重要的.它抽象出对象之间的联系,让对象构成某个联系起来的结构.以下将简要分析一下UML中的四种关系:关联.依赖,泛化,实现. 一.举例罗列 1.关联(Association) 关联 ...

  2. 使用jsmin压缩javascript脚本

    官方地址:http://www.crockford.com/javascript/jsmin.html 点击页下方的”zip file containing an MS-DOS.exe file“下载 ...

  3. windows域相关

    查看域角色: netdom query fsmo

  4. 06-编写Hibernate API编写访问数据库的代码,使用Junit进行测试

    用到的注解: @Test:测试方法 @Before:初始化方法. @After:是否资源. 先执行Befere,然后执行Test,最后执行After. 第一步:新建一个Junit目录. 第二步:取名 ...

  5. Lr_debug_message,Lr_output_message,Lr_error_message,Lrd_stmt,Lrd_fetch

    今天在群里,问了 Lr_debug_message,Lr_output_message,Lr_error_message,Lrd_stmt,Lrd_fetch.下 面我整理了下Lr_debug_mes ...

  6. vpngate 的使用

    第一次为小日本打广告.. .我仅仅想仰天大喊..玛的戈壁. .. 竟然活到这个份上了...想出去看看的往下看.. vpngate 下载: http://pan.baidu.com/s/1hq5x3Ly ...

  7. thinkphp 3.2多语言设置

    1.将CheckLangBehavior.class.php(没有的话去下载完整版)文件放到此目录下:\ThinkPHP\Extend\Behavior 2.修改目录下文件Application\Ho ...

  8. mysql表属性、索引、约束

    1.表属性 创建表的基本语法: create table [if not exists] 表名 (字段列表 [,索引或约束列表])[表选项列表] 其中,字段列表格式如下: 字段名 类型 [属性列表], ...

  9. 数据库表syscolumns 各个字段含义 select * from syscolumns where name='textA'

    每个数据库创建后都会有一些系统表用来存储该数据库的一些基本信息 每个表和视图中的每列在表中占一行,存储过程中的每个参数在表中也占一行.该表位于每个数据库中. 列名 数据类型 描述 name sysna ...

  10. 文件操作FileStream,Log

    1.关于读写文件,犯的一个低级错误,平常代码拷贝习惯了,就像电脑用多了会提笔忘字一样,所以平常还是要多多用心才好. 这段代码的意图是在文件中写入数据,如果原文件不存在,则先新建. 事实上,当真的执行了 ...