剑指offer——连续子数组的最大和
问题描述
求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
思路分析
利用等差数列求和公式,
S
n
=
(
1
+
n
)
∗
n
/
2
=
(
n
2
+
n
)
/
2
Sn=(1+n)*n/2 =(n^2+n)/2
Sn=(1+n)∗n/2=(n2+n)/2
Math.pow(x,y) 方法可返回 x 的 y 次幂的值。
又由于不能用除号,所以用右移。
代码
public class Solution {
public int Sum_Solution(int n) {
return (int)(Math.pow(n, 2) + n) >> 1;
}
}