网友:34岁,月薪才1万7,在老家抬不起头。奔三了,月薪多少才正常?

一位34岁的硕士网友薪水引发讨论,对比一线城市程序员的平均薪资,文中提到LeetCode第36题——有效数独作为程序员面试题。文章通过分析数独验证算法,展示了技术职业的薪酬差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一网友说自己34岁了,211硕士,月薪才1万7,她妈在老家都抬不起头,大家都说她花那么多心思培养一个女儿,结果34岁了月薪才1万7,都达不到上海的平均水平。

01ea49b954d40771a111b45541eb92fc.png

就目前来看上海的平均月薪还远远达不到1万7,不管多少岁,我觉得月薪能达到1万7已经非常不错了,我们来看下其他网友的评论。

2b6cc7b4148dc279ae99af12572a9f07.png

2aeac752d7f5f9a5d9545e9d56dbc5ab.png

950bdca8afefec3e59fe290e1e28b1bb.png

cc6f1d1d7c1c3119ee69f0bedcaf0d4c.png

1b5906641d0567b03bf4923bc8c15cc9.png

8f4254135082ce232d5de5e066cd412a.png

f8f167d1754818dfc5d2c4cad5964e87.png

b8eaaf37e7d85b1ee05d77315444aa42.png

09df5fcfc7bb4bb80b06e37be12f1138.png

30多岁月薪到底多少才算正常呢?其实这个并没有一个正确的答案。因为不同的地方,不同的岗位,薪资差别是很大的。就比如说对于一个一线城市的程序员来说,34岁月薪才1万7,确实是有点低了。

说到程序员我们就来看一道和程序员有关的面试题,这题是LeetCode第36题:有效的数独。这题在字节和蚂蚁的面试中都考过,我们来看下。

7d4ef4a2b1aacea6cb3cd77fded2af89.png

问题描述

来源:LeetCode第36题

难度:中等

请你判断一个 9 x 9 的数独是否有效。只需要根据以下规则 ,验证已经填入的数字是否有效即可。

1,数字 1-9 在每一行只能出现一次。

2,数字 1-9 在每一列只能出现一次。

3,数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)

注意:

1,一个有效的数独(部分已被填充)不一定是可解的。

2,只需要根据以上规则,验证已经填入的数字是否有效即可。

3,空白格用 '.' 表示。

示例1:

8c9e7abe6ee3947068a73768c916ae40.png

输入:board = 

[["5","3",".",".","7",".",".",".","."]

,["6",".",".","1","9","5",".",".","."]

,[".","9","8",".",".",".",".","6","."]

,["8",".",".",".","6",".",".",".","3"]

,["4",".",".","8",".","3",".",".","1"]

,["7",".",".",".","2",".",".",".","6"]

,[".","6",".",".",".",".","2","8","."]

,[".",".",".","4","1","9",".",".","5"]

,[".",".",".",".","8",".",".","7","9"]]

输出:true

  • board.length == 9

  • board[i].length == 9

  • board[i][j] 是一位数字(1-9)或者 '.'

问题分析

数独大家应该都玩过吧,就是每行每列以及每个9宫格内都不能有重复的数字,这题让判断数独中已经填入的数字是否有效。因为每行每列以及每个9宫格最多只能有9个数字,所以我们可以使用位运算来解决。

比如line[i]就表示第 i 行的状态,如果第 i 行有一个 3 我们就在数字line[i]的二进制中第 3 位标记为 1 ,如果第 i 行有一个 5 我们就在数字line[i]的二进制中第 5 位标记为 1 ,如下图所示。

10aa6beaf72707c00f647b08421c38c5.png

如果我们在标记某个位置之前,该位置已经被标记过,说明出现了重复数字,那么这个数独就是无效的,代码如下。

JAVA:

public boolean isValidSudoku(char[][] board) {
    int[] line = new int[9];// 行
    int[] col = new int[9];// 列
    int[] cell = new int[9];// 9宫格
    for (int i = 0; i < 9; i++) {
        for (int j = 0; j < 9; j++) {
            // 如果当前位置没有数字,不用判断。
            if (board[i][j] == '.')
                continue;
            int shift = 1 << (board[i][j] - '0');// 确定第几位
            int k = (i / 3) * 3 + j / 3;// 9宫格的第几个。
            // 如果对应的位置只要有一个被标记过,说明有冲突,直接返回false。
            if ((col[i] & shift) > 0 || (line[j] & shift) > 0
                    || (cell[k] & shift) > 0)
                return false;
            // 把当前位置所在的行,列以及9宫格都标记为该数字已经存在。
            col[i] |= shift;
            line[j] |= shift;
            cell[k] |= shift;
        }
    }
    return true;
}

C++:

public:
    bool isValidSudoku(vector<vector<char>>& board) {
        int line[9]= {0}; // 行
        int col[9] = {0}; // 列
        int cell[9] = {0}; // 9宫格
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                // 如果当前位置没有数字,不用判断。
                if (board[i][j] == '.')
                    continue;
                int shift = 1 << (board[i][j] - '0');// 确定第几位
                int k = (i / 3) * 3 + j / 3;// 9宫格的第几个。
                // 如果对应的位置只要有一个被标记过,说明有冲突,直接返回false。
                if ((col[i] & shift) > 0 || (line[j] & shift) > 0
                        || (cell[k] & shift) > 0)
                    return false;
                // 把当前位置所在的行,列以及9宫格都标记为该数字已经存在。
                col[i] |= shift;
                line[j] |= shift;
                cell[k] |= shift;
            }
        }
        return true;
    }

-------------------------end-------------------------

笔者简介

博哥,真名:王一博,毕业十多年,《算法秘籍》作者,专注于数据结构和算法的讲解,在全球30多个算法网站中累计做题2000多道,在公众号中写算法题解700多题,对算法题有自己独特的解题思路和解题技巧,喜欢的可以给个关注,也可以下载我整理的1000多页的PDF算法文档。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据结构和算法

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值