2024最新平均工资出炉,这就全国月薪过万了?

文摘   2024-11-20 14:08   湖北  
这是苍何的第 233 篇原创!

大家好,我是苍何。

最近国家统计局编著出版的《中国统计年鉴2024》公布了 2023 年 31 个省份就业人员的工资统计数据。觉得很有必要给大家做个分享。

稍微做了下计算,2023 年全国城镇非私营单位就业人员年平均工资为 120698元。

换成月薪的话,那不就是月薪都过万了啊

但细想一下,这数据并不能作为一个衡量标准,首先平均数水分最大,毕竟我和马云薪资一平均,说不定也是个百万富翁😂,要看就得看中位数。

其次,可以看到城镇私营单位就业人员年平均工资为 68340 元。平均月薪只有 5695 元。有人说,就这?还不够我交公积金的呢。好扒,你牛🐶。

从城市来看,上海、北京稳稳占据第一梯队。这两城市城镇非私营单位年平均工资居然超过了 20 万!简直遥遥领先。

从行业看,我国收入最高的三个行业分别是信息传输、软件和信息技术服务业,金融业,科学研究和技术服务业

而北京、上海是这些高收入行业最集中的地方,故而收入偏高很多。

我之前的文章中有不少是互联网大厂各种薪资爆料,看久了,你会觉得,为何月薪过万,对于互联网刚毕业的学生来说,都瞧不上,白菜价中的白菜价。而对于在一些传统行业,月薪过万可能是一辈子的梦想。

真实的情况到底是怎样的?到底多少人月薪过万?

从城镇私营单位平均工资来看,如果你月薪过万,已经完全超过了全国所有地区的平均数。

我又找了一组数据,在CNNIC发布的第47次《中国互联网络发展状况统计报告》里,其中月收入在 8000 以上的仅有 14.8 %。

别的不说,外卖员、快递小哥,滴滴师傅,又有多少人能达到月薪一万的标准呢?

那些风里来雨里去的最辛勤的劳动者,光是勉强维持生计就已经费尽全力了。

那究竟哪些人,哪些行业都月入过万呢?

看了下数据,IT、互联网、游戏是分布最多的行业,而我所处的 IT 行业,月薪过万确实比较普遍。

再看一组数据,月薪一万,都是些什么学历呢?

可以看到在月入一万职场人的学历分布中,本科占比 59.64%,大专及以下学历的职场人有23.75%,而硕士和博士很多都高于这个标准。

所以从现象来看,读书不见得没用,当然选择也更为重要,有些人选了个好专业,热门赛道,分分钟月入过万。

专业选择可能现在可控不多了,但刚毕业,选择城市也显得尤为重要,我一般都是建议能去一线就去一线,能去大厂就去大厂,先把自己工资基数拉高,以后即使想回老家发展了,也有的折扣可打,不然打骨折后,渣都不剩。

毕竟,在一线城市你能收获的眼界,资源,机遇,这些不是二三线城市能比的,在这种环境中,你自然成长会更快,当然你也赚的更多。

哎,又是打工人被平均的一年,今天你被平均了吗?欢迎评论区讨论。

...

回归主题。

今天来一道中位数相关的面试算法题,给枯燥的牛马生活加加油😂。

题目描述

平台:LeetCode

题号:295

题目名称:数据流的中位数

题目描述:

中位数是有序整数列表的中间值。如果列表的大小是偶数,则中位数是中间两个数的平均值。

  • 例如,arr = [2,3,4] 的中位数是 3

  • 例如,arr = [2,3] 的中位数是 (2 + 3) / 2 = 2.5

实现 MedianFinder 类:

  • MedianFinder() 初始化 MedianFinder 对象。

  • void addNum(int num) 将数据流中的整数 num 添加到数据结构中。

  • double findMedian() 返回到目前为止所有元素的中位数。与实际答案相差 10^-5 以内的答案将被接受。


示例:

输入:

["MedianFinder", "addNum", "addNum", "findMedian", "addNum", "findMedian"]
[[], [1], [2], [], [3], []]

输出:

[null, null, null, 1.5, null, 2.0]

解释:

MedianFinder medianFinder = new MedianFinder();
medianFinder.addNum(1); // arr = [1]
medianFinder.addNum(2); // arr = [1, 2]
medianFinder.findMedian(); // 返回 1.5 ((1 + 2) / 2)
medianFinder.addNum(3); // arr = [1, 2, 3]
medianFinder.findMedian(); // 返回 2.0

提示:

  • -10^5 <= num <= 10^5

  • 在调用 findMedian 之前,数据结构中至少有一个元素。

  • 最多调用 5 * 10^4addNumfindMedian


解题思路

本题需要设计一个高效的数据结构以支持动态计算中位数。

核心思路:

  1. 使用两个堆:

  • 一个最大堆存储较小的一半元素(left),堆顶为最大值。

  • 一个最小堆存储较大的一半元素(right),堆顶为最小值。

  • 保证平衡:

    • 两个堆的元素数量相等,或者最大堆比最小堆多一个元素。

    • 插入时根据大小关系插入到对应堆中,并在需要时平衡两个堆。

  • 中位数计算:

    • 当元素个数为奇数时,中位数为最大堆堆顶。

    • 当元素个数为偶数时,中位数为两个堆堆顶的平均值。

    算法流程:

    1. 调用 addNum(num)

    • 如果新元素小于等于最大堆的堆顶,加入最大堆;

    • 否则加入最小堆;

    • 平衡两个堆的大小。

  • 调用 findMedian()

    • 若总元素数为奇数,返回最大堆堆顶;

    • 若总元素数为偶数,返回两个堆顶的平均值。

    时间复杂度:

    • 插入操作:O(log n)(堆的插入与调整)。

    • 获取中位数:O(1)


    代码实现

    Java 实现

    import java.util.PriorityQueue;

    class MedianFinder {
    private PriorityQueue<Integer> left; // 最大堆
    private PriorityQueue<Integer> right; // 最小堆

    public MedianFinder() {
    left = new PriorityQueue<>((a, b) -> b - a); // 最大堆
    right = new PriorityQueue<>(); // 最小堆
    }

    public void addNum(int num) {
    if (left.isEmpty() || num <= left.peek()) {
    left.offer(num);
    } else {
    right.offer(num);
    }

    // 平衡两个堆的大小
    if (left.size() > right.size() + 1) {
    right.offer(left.poll());
    } else if (right.size() > left.size()) {
    left.offer(right.poll());
    }
    }

    public double findMedian() {
    if (left.size() > right.size()) {
    return left.peek();
    } else {
    return (left.peek() + right.peek()) / 2.0;
    }
    }
    }

    C++ 实现

    #include <queue>
    using namespace std;

    class MedianFinder {
    private:
    priority_queue<int> left; // 最大堆
    priority_queue<int, vector<int>, greater<int>> right; // 最小堆

    public:
    MedianFinder() {}

    void addNum(int num) {
    if (left.empty() || num <= left.top()) {
    left.push(num);
    } else {
    right.push(num);
    }

    // 平衡两个堆的大小
    if (left.size() > right.size() + 1) {
    right.push(left.top());
    left.pop();
    } else if (right.size() > left.size()) {
    left.push(right.top());
    right.pop();
    }
    }

    double findMedian() {
    if (left.size() > right.size()) {
    return left.top();
    } else {
    return (left.top() + right.top()) / 2.0;
    }
    }
    };

    Python 实现

    import heapq

    class MedianFinder:
    def __init__(self):
    self.left = [] # 最大堆(用负数模拟)
    self.right = [] # 最小堆

    def addNum(self, num: int) -> None:
    # 插入到最大堆或最小堆
    if not self.left or num <= -self.left[0]:
    heapq.heappush(self.left, -num)
    else:
    heapq.heappush(self.right, num)

    # 平衡两个堆的大小
    if len(self.left) > len(self.right) + 1:
    heapq.heappush(self.right, -heapq.heappop(self.left))
    elif len(self.right) > len(self.left):
    heapq.heappush(self.left, -heapq.heappop(self.right))

    def findMedian(self) -> float:
    if len(self.left) > len(self.right):
    return -self.left[0]
    else:
    return (-self.left[0] + self.right[0]) / 2.0

    测试代码

    # 示例测试
    medianFinder = MedianFinder()
    medianFinder.addNum(1) # arr = [1]
    medianFinder.addNum(2) # arr = [1, 2]
    print(medianFinder.findMedian()) # 输出 1.5
    medianFinder.addNum(3) # arr = [1, 2, 3]
    print(medianFinder.findMedian()) # 输出 2.0

    ending

    你好呀,我是苍何。是一个每天都在给自家仙人掌讲哲学的执着青年,我活在世上,无非想要明白些道理,遇见些有趣的事。倘能如我所愿,我的一生就算成功。共勉 💪

    点击关注下方账号,你将感受到一个朋克的灵魂,且每篇文章都有惊喜。

    感谢大家一直以来的阅读、在看和转发,我会把流量主收益都用来发红包,大家可在公众号页面发送相关暗号关键词获取抽奖,每一篇文章会给到一个不同的暗号,对应的抽奖都是独立的,此篇暗号为【平均】,在后台回复【平均】,即可点击进去参与抽奖!抽奖内容、金额、个数等都无变化,在开奖前参与抽奖,操作均有效。

    注意,后台(不是评论区,是后台)回复【平均】即可参与抽奖。
    后台回复(不是评论区,是后台)即可参与抽奖。
    后台回复(不是评论区,是后台)即可参与抽奖。

    就像大家之前回复【八股】一样。

    【我爱这个魔幻的世界】

    苍何
    独立开发者,专注于Java企业级开发,AI 工具提效。偶尔闪光、经常表达、总是真诚。
     最新文章