在数据结构与算法中,我们来讲讲求和这个经典问题,不对之处还请各位不吝赐教。
求:1+2+3+…+100的和
想必大家都会想这个太简单的了吧,用一个for循环
不就得了,的确是可以这样但是你有想过这样做的复杂度是多少吗?我们算法的精湛就是要复杂度越小越好,资源利用的越少越好
先上for循环的代码:
//求1+2+3+....+100的和
public class Main1 {
public static void main(String[] args) {
int n=100,sum=0;
for(int i=1;i<=n;i++) {
sum+=i;
}
System.out.println(sum);
}
}
如果面试你是这么写的,你已经被PASS掉了,为什么呢?请接着往下看
对问题进行分析
你应该能找出其中的规律,也就是我们初高中的公式,所以我们应该这么写:
//求1+2+3+....+100的和
public class Main2 {
public static void main(String[] args) {
int n=100,sum=0;
sum=(1+n)*n/2;
System.out.println(sum);
}
}
答案应该是这样,这两中算法的好坏应该用什么来衡量呢?
肯定是上面所提到的复杂度啦,不懂的小伙伴可以百度或者翻阅书籍,这是一个很重要的概念!
对比两种算法:
资源图:
X轴是内容,Y轴是资源,我们可以看出,n和1中资源使用的差别,可能这个例子还不太明显,但你可以发现n!和2的n次方与n,1对比,可以说是天差地别的!
由分析得,显然是第二种算法好,复杂度低,算法是特别重要的,因为在一些应用的场景,例如一些高并发,如果使用到的算法是很高复杂度的,那么服务器反应很慢或者很快就会宕机,所以一定要认识算法的重要性,掌握好算法。