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

        示例:计算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. linux文件夹操作及递归遍历文件夹

    文件夹相关函数介绍 //mkdir 函数创建文件夹 #include <sys/stat.h> #include <sys/types.h> int mkdir(const c ...

  2. 关于天津中软国际ETC培训中心的见与闻

    半个月的时间转眼即逝,在中软国际天津ETC的实训的两个星期就这样过去了,在中软国际天津站的这段时间也收获了非常多.明确了非常多,了解了很多关于社会就业的知识以及关于软件培训的一些事情.尽管我的了解可能 ...

  3. java异常处理Exception

    我看别人的面经中有一道题目就问到了Exception,即java的异常处理的,我曾经也学了java的异常处理,可是我查了下,看了别人的博客关于写的exception异常处理.我发现,自己学的不坚固,仅 ...

  4. pip换国内源

    pip换国内源 1.国内常用源   阿里云 http://mirrors.aliyun.com/pypi/simple/   中国科技大学 https://pypi.mirrors.ustc.edu. ...

  5. MySQL-sqlmap常用参数的中文解释

    #HiRoot's BlogOptions(选项):--version 显示程序的版本号并退出-h, --help 显示此帮助消息并退出-v VERBOSE 详细级别:0-6(默认为1) Target ...

  6. java.lang.NullPointerException org.apache.jsp.index_jsp._jspInit(index_jsp.java:22)

    java.lang.NullPointerException org.apache.jsp.index_jsp._jspInit(index_jsp.java:22) org.apache.jsp.i ...

  7. SQL Server Profiler 跟踪sql小技巧

    使用Profile监控sql时候经常会有很多很多的sql,想查询那条是自己的sql很困难,但是连接字串有个参数可以解决这个问题这个参数是Application Name例如说 我们在需要的数据库连接中 ...

  8. Controller Service Dao总结

    今天主要学习了Controller,Service,Dao的相关知识 我的理解主要是这种,Controller主要与前台页面打交道 比方:前台页面有一个"加入用户"的提交butto ...

  9. jks & pfk

    keytool and jks keytool Name keytool - Key and Certificate Management Tool Manages a keystore (datab ...

  10. jquery为动态添加元素绑定点击事件

    on()方法添加的事件处理程序适用于当前及未来的元素(比如由脚本创建的新元素) $("#mainbody").on("click",".link&qu ...