给你两个非负整数 low 和 high 。请你返回 low 和 high 之间(包括二者)奇数的数目。
示例 1:
输入:low = 3, high = 7
输出:3
解释:3 到 7 之间奇数数字为 [3,5,7] 。
示例 2:
输入:low = 8, high = 10
输出:1
解释:8 到 10 之间奇数数字为 [9] 。
提示:
0 <= low <= high <= 109
思路:
~~~~~~ 计算区间的奇数个数一共可以分为4种情况,一般的思路就是遍历,但时间复杂度是O(n),而这种方法的时间复杂度是O(1)。
~~~~~~ 第一种情况,当low和high都是奇数时,此时区间内奇数最多,比如low=3,high=7,区间为3,4,5,6,7, 奇数个数为3,也就是计算一共的个数(high-low+1),再除2加1。
~~~~~~ 第二种情况就是low和high都是奇数,剩下的2中情况时low和high其中一个为奇数,这种和都是奇数时情况一样,所以都放在else中了。
class Solution {
public:
int countOdds(int low, int high) {
if(low&1&&high&1)
return (high-low+1)/2+1;
else
return (high-low+1)/2;
//可以总结为下面一行代码
//return low&1&&high&1 ? (high-low+1)/2+1 : (high-low+1)/2;
}
};
如果文章对您有帮助,那就点个赞鼓励一下吧,蟹蟹!