1.问题描述:在区间范围内统计奇数数目
给你两个非负整数 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 <= 10^9
2.算法思路
暴力解题:
1、设置count变量
2、找到两数的区间
3、区间内取余2,看是否为0,不为0,则count加1
3.自己写的题解
class Solution {
public int countOdds(int low, int high) {
int count=0;
for(int i=low;i<=high;i++){
if(i%2==0){
continue;
}
count++;
}
return count;
}
}
超时了
4.别人优化的题解
class Solution {
public int countOdds(int low, int high) {
int count=(high-low)/2;
return high%2==1||low%2==1?count+1:count;
}
}
5.总结
暴力题解很容易想到,但当数据量很大的时候容易出现超时现象
这个题用数学思路能大大解约时间
(4-2)/2 1
(4-1)/2 2
(3-1)/2 2
high和low都是偶数时候直接是相减除2
high和low其他情况下只需要结果加1即可