给你两个非负整数 low 和 high 。请你返回 low 和 high 之间(包括二者)奇数的数目。
其实这个也不难,先来一个简单的解法,那就是从low遍历到高位,找出所有的奇数的数目就行,但是这种方法需要消耗大量的时间,所以最好不要使用,我们得使用别的方法,那么我们得怎么写呢?首先我们应该知道,偶数的数目减奇数的数目的绝对值要么是1要么是0,所以我们可以知到奇数的数目至少是(high-low)/2。现在我们就要来判断什么时候是1的时候,而是1的时候就要总数就要加1。那么什么时候是1呢?其实是low和high都不是偶数时就是1,如果有一个是偶数,那么总的奇数就是(high-low)/2;为什么是怎么样的呢?我们可以随便拿来两个数字看看是不是这样,至于为什么,那么我只能说就是这样的。下面是代码。
int countOdds(int low, int high) {
int amount=0;
if(low%2==0&&high%2==0)
{
amount=(high-low)/2;
}
else
{
amount=(high-low)/2+1;
}
return amount;
}
本文介绍了一种高效计算指定范围内奇数数量的方法。通过分析low和high边界的特点,提出了一种仅需简单数学运算即可得出结果的算法。该算法避免了逐个检查每个数字的需要,从而大大提高了效率。

1885

被折叠的 条评论
为什么被折叠?



