[LeetCode刷题笔记(C++)]1523+1491


没抵挡住诱惑转c++了,以后的题都用c++写…

1523 在区间范围内统计奇数

给你两个非负整数 lowhigh。请你返回 lowhigh之间(包括二者)奇数的数目。
题目链接
是简单题,一行代码

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

一些关于位运算速度的小问题

在优化的时候我有想过,位运算在乘除以及取余运算中是否比直接写乘除快呢?依稀记得这个问题老师当初上课的时候也提问过,但是我不记得答案了,也没有自己做过实验。先占一个坑。以后有空再回来回答。

1491 去掉最低工资和最高工资后的平均工资

给你一个整数数组 salary ,数组里每个数都是 唯一 的,其中 salary[i] 是第 i 个员工的工资。

请你返回去掉最低工资和最高工资以后,剩下员工工资的平均值。
注意

  • 3 ⩽ s a l a r y . l e n g t h ⩽ 100 3 \leqslant salary.length \leqslant 100 3salary.length100
  • 1 0 3 ⩽ s a l a r y [ i ] ⩽ 1 0 6 10^3 \leqslant salary[i] \leqslant 10^6 103salary[i]106
  • s a l a r y [ i ] salary[i] salary[i] 是唯一的。
  • 与真实值误差在 1 0 − 5 10^{-5} 105 以内的结果都将视为正确答案。

题目链接
不使用排序,是因为排序最快也要 O ( n l o g n ) O(nlog_n) O(nlogn)。直接遍历。

class Solution {
public:
    double average(vector<int>& salary) {
        int len = salary.size();
        double max = salary[0];
        double min = salary[0];
        double  sum = 0;

        for(int i = 0; i < len; i++)
        {
            sum += salary[i];
            max = max > salary[i] ? max : salary[i];
            min = min < salary[i] ? min : salary[i];
        }

        sum = sum - min - max;
        return sum / (len - 2);
    }

注意

  • 数据类型和范围. 以下摘自《c primer plus(第六版)中文版》

double类型和float类型的最小取值范围相同,但至少必须能表示10位有效数字。一般情况下,double占用64位而不是32位。一些系统将多出的32位全部来表示非指数部分。这不仅增加了有效数字的位数(即提高了精度),而且减少了舍入误差。另一些系统把其中的一些位分配给指数部分,以容纳更大的指数,从而增加了可表示数的范围。无论哪种方法,double类型的值至少有13位有效数字。 超过了标准的最低位数规定。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值