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

        示例:计算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. 处理SecureCRT中使用vim出现中文乱码的问题

    在工作中经常需要使用到SecureCRT登录到linux环境去做一些文本处理的工作,因此就经常会遇到一些乱码问题,尤其是编辑的内容包含较多中文的情形,下面就是遇到类似问题的解决办法.LANG=POSI ...

  2. struts2+jquery验证注冊用户是否存在

    注冊界面 register.jsp <%@ page language="java" contentType="text/html; charset=UTF-8&q ...

  3. mac 查看目前哪些进程占用哪些端口

    lsof -nP  | grep TCP | grep LISTEN lsof -i :TCP

  4. hibernate 关于session的update方法

    先看写代码的方法: @Test     public void testUpdate3() {                         Teacher t = new Teacher();   ...

  5. Java的内存机制(转)

    0.参考资料: http://www.j2megame.org/index.php/content/view/2246/125.html 1.Java的内存机制 Java 把内存划分成两种:一种是栈内 ...

  6. jrebel 7免费激活(非破解) 和 IntelliJ Idea 2017 免费激活方法

    转自http://www.cnblogs.com/suiyueqiannian/p/6734412.html http://www.cnblogs.com/suiyueqiannian/p/67540 ...

  7. [1-1] 把时间当做朋友(李笑来)Chapter 1 【心智的力量】 摘录

    今天开了读书笔记这一专题,主要是对自己今后读的书有一个小小的记录,也为解决自己读书多年的存在的一些习惯的问题. 打小就喜欢书,可能最早的书是家人买的看图识动物.还记得七八岁时见书摊上的书时赖着不走央求 ...

  8. 解疑 Numpy 中的 transpose(转置)和swapaxes(两个轴转置变换)

    1.一维和二维数据 .T等同于.transopse 2.三维及更多维数据 对于 z 轴 与 x 轴的变换 In [40]: arr = np.arange(16).reshape((2, 2, 4)) ...

  9. python生成.exe

    python生成.exe 1.在Anaconda Prompt终端输入pip install pyinstaller 2.输入python -m pip install pypiwin32 pytho ...

  10. mysql中如何统计某字段里某个字符的个数

    select * from order where length(order_num)-length(replace(order_num,'8','')) = 4