我是靠谱客的博主 成就流沙,这篇文章主要介绍[LeetCode刷题笔记(C++)]1523+14911523 在区间范围内统计奇数1491 去掉最低工资和最高工资后的平均工资,现在分享给大家,希望可以做个参考。

目录

  • 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位有效数字。 超过了标准的最低位数规定。

最后

以上就是成就流沙最近收集整理的关于[LeetCode刷题笔记(C++)]1523+14911523 在区间范围内统计奇数1491 去掉最低工资和最高工资后的平均工资的全部内容,更多相关[LeetCode刷题笔记(C++)]1523+14911523内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(110)

评论列表共有 0 条评论

立即
投稿
返回
顶部