leetcode 1523. 在区间范围内统计奇数数目

给你两个非负整数 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;
    }
};


如果文章对您有帮助,那就点个赞鼓励一下吧,蟹蟹!

猜你喜欢

转载自blog.csdn.net/xiatutut/article/details/127717111