看很多人第二问都是两个for,其实等差数列可以直接套公式算出全部和的值...
Topic source因为程序浮点数的保存格式,所以这里不应该强制转换成int。我建议直接第一句改成下面的,不用float。
int sum = (start + end) * (end - start + 1) / 2;
关键是证明这个语句一定是2的倍数,如下:
- start奇数,end奇数:start+end为偶数
- start偶数,end奇数:end-start+1为偶数
- start奇数,end偶数:end-start+1为偶数
- start偶数,end偶数:start+end偶数
综上,sum一定会是一个由完整的int转换得到的int,而不是float截断的int,完全不需要用float。
static int findMissingNumber(int start, int end, List<Integer> list) {
int total = ((start+end)*(end-start+1))/2;
System.out.println(total);
int sum = 0;
for (Integer itemInteger :list) {
sum+= itemInteger;
}
System.out.println(sum);
return total - sum;
}
- 1
南国的音符
怎么排版这么乱。。