码迷,mamicode.com
首页 > 其他好文 > 详细

关于 0+...+n 不使用循环判断

时间:2020-07-02 21:36:43      阅读:51      评论:0      收藏:0      [点我收藏+]

标签:线程   lag   优化   最小   没有   boolean   java8   使用   解决   

仅考虑不使用判断循环,符合题意的解决方案

1.使用递归

1 public int intSum(int n) {
2         int sum = n;
3         boolean flag = n > 0 && (sum += intSum(n - 1)) > 0;
4         return sum;
5     }

2.Java8

1 public long intSumWithStream(int n) {
2         return LongStream.range(0, n + 1).sum();
3     }

3.配合求和公式

1 public int sum(int n) {
2         int sum = 0;
3         boolean flag = n > 0 && (sum = ((1 + n) * n) / 2) > 0;
4 return sum; 5 }

第一种:弊端很多,Java中一般不采用递归,没有进行递归优化,n 不能过大;

第二种:多线程,n 较小时耗时较长,n 较大时耗时较短,n 可以达到亿级,n < Integer.MAX_VALUE(2147483647)时结果都正确;

第三种:耗时和资源最小,n 不能过大;

 4.综合第二种和第三种:

1 public long intSumWithStream(int n) {
2         long sum = 0;
3         boolean flag = n > 0 && n <= 46340 && (sum = ((1 + n) * n) / 2) > 0;
4         flag = n > 46340 && (sum = LongStream.range(46341, n + 1).sum() + 1073720970) > 0;
5         return sum;
6     }

 

关于 0+...+n 不使用循环判断

标签:线程   lag   优化   最小   没有   boolean   java8   使用   解决   

原文地址:https://www.cnblogs.com/htsg/p/13226933.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!