1523. 在区间范围内统计奇数数目(1)

问题描述1:

在这里插入图片描述

1.首先0到8之间有5偶4奇。
2.最大数和最小数都是偶数时,奇数个数:sum = (high - low)/2; 其他情况都是(high - low)/2 + 1取下界;
3.【0,x】之间奇数为(x+1)/2 取下界

所以这里可以这样计算x->y之间的奇数=》先计算完[0,x-1] (保留数字x的存在) 之间的奇数,然后计算[0,y]的奇数,最后做差.

11

题外话:
举例子:
1. x=6(0110)>>(0011)=3
2. 6+1=7(0111)>>(0011)=3
3. (1,3,5)刚好3个奇数====》所以【0,奇数】有几个奇数,下一位数字也几个奇数(5/6、7/8…奇数是一样)
4. 就是x为奇数时,例如5,不够进位,加一位后方可除2,为奇数个数,偶数的话加一之后移位对结果没有影响
右移1位表示数字降一倍,左移1位增加1倍(偶数,奇数近似)

c++编程

class Solution {
public:
    int odd(int x){
        return (x+1)>>1;
    }
    int countOdds(int low, int high) {
        return odd(high)-odd(low-1);
    }
};

python3编程

class Solution:   
    def countOdds(self, low: int, high: int) -> int:
        odd=lambda x: (x + 1) >> 1   #匿名函数
        return odd(high)-odd(low-1)

问题描述2:1491. 去掉最低工资和最高工资后的工资平均值

vector < int > &A ;意味着vector是一个向量(或int型的容器),引用A

wenti2

提示:int ints[] = { 3,5,7,2,7,6,4 };
//方法一
cout << “方法一最大值地址是” << max_element(ints, ints + 7, structs) << endl;
cout << “方法一最大值的值是” << *max_element(ints, ints + 7, structs ) << endl;
//方法二
cout << “方法二最大值地址是” << max_element(ints, ints + 7) << endl;
cout << “方法二最大值的值是” << *max_element(ints, ints + 7) << endl;
//如果不加 ‘ * ’获取的是他的地址,求数列的最小值min_element()。同理

int sum = accumulate(vec.begin() , vec.end() , 42);
accumulate 带有三个形参:头两个形参指定要累加的元素范围,第三个形参则是累加的初值

c++编程

class Solution {
public:
    double average(vector<int>& salary) {
        double tall =  *max_element(salary.begin(), salary.end());
        double small = *min_element(salary.begin(), salary.end());
        double sum = accumulate(salary.begin(), salary.end(),-tall-small);
        return sum/(salary.size()-2);
    }
};

python3编程

class Solution:
    def average(self, salary: List[int]) -> float:
        tall=max(salary)
        small=min(salary)
        sum1=sum(salary)-tall-small
        return sum1/(len(salary)-2)

若有理解错误后台留言,谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值