代码效率VS代码配置

来源:互联网 发布:php 访问 编辑:程序博客网 时间:2024/05/17 03:28

先来看一个简单的问题:

1.给定一个自然数N,求出所有小于N的自然数中,是3或者5倍数的数,并计算它们的和。

2.如果一个数既是3也是5的倍数,只加一次。

3.比如N=10,满足条件的数有9653,那么他们的和很显然是23

 

问题的处理:

1.大部分人拿到这个问题,下意识地会遍历所有小于N的自然数,一一匹配,看它是否是35的倍数。这种做法,效率不高,也没有什么亮点。

2.有部分人会思考如何对上面的方法进行改进,看如何增加可配置性。比如把35写进配置中,遍历时读取配置即可。假如业务修改了,比如说我只需要求3的倍数,不需要求5的倍数,或者,我想增加对711的判断,这样就非常方便,只需要修改一个地方。

3.还有的人单单从效率出发,用数学方法,比如等差数列,对其求和,这样效率的确很高,但可配置性显然不如方法二,一旦业务发生变更,要新增修改的地方就很多了。

 

代码实现:

public class Solution {//配置int[] factors = new int[] { 3, 5 };//通用遍历方法public int solution(int number) {int count = 0;for (int i = number - 1; i > 0; i--) {for (int f : factors) {if (i % f == 0) {count += i;break;}}}return count;}//利用等差数列性质的数学方法public int math_solution(int n) {int a = (int) Math.ceil(n / 3d) - 1;int b = (int) Math.ceil(n / 5d) - 1;int c = (int) Math.ceil(n / 15d) - 1;return (3 * a * (a + 1) + 5 * b * (b + 1) - 15 * c * (c + 1)) / 2;}public static void main(String[] args) {//2318System.out.println(new Solution().solution(100));//2318System.out.println(new Solution().math_solution(100));}}

总结:

代码效率,可扩展性,可配置性是我们关注的几个方面,有时候很难取舍,但对于我们做应用系统,做业务的人来说,我个人认为,可扩展性,可配置性,可读性重于代码效率。


0 0