标签:线程 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 }
标签:线程 lag 优化 最小 没有 boolean java8 使用 解决
原文地址:https://www.cnblogs.com/htsg/p/13226933.html