题目链接:1523. 在区间范围内统计奇数数目(简单)
算法原理:
解法:前缀和思想
击败100.00%
时间复杂度O(1)
一次遍历相信大家都会,但时间复杂度会达到O(N),题目要求统计区间内的奇数,恰好奇数偶数是连续存在的,那有没有更快的方法呢?有的!兄弟有的!
既然是一奇一偶,那么÷2不就得了?不对的,这里要视边界而论
我们选择区间[low,high]
当low是奇数时,它前面的奇数在[0,low),有low/2个
当low是偶数时,它前面的奇数在[0,low),也是low/2个
当high是奇数时,它前面的奇数在[0,high),但它自己也要算上,所以是high/2+1个
当high是偶数时,它前面的奇数在[0,high),是high/2个
由于 / 在int中只会取整数,所以high是偶数时可以写成(high+1)/2个,这与high是奇数时的high/2+1是等价的,所以都可以写成(high+1)/2
那么直接返回 (high+1)/2-low/2就行了
Java代码:
java
class Solution {
public int countOdds(int low, int high) {
return (high+1)/2-low/2;
}
}