Python技术迷

离谱!华为员工请假一天,代价是3700

最近,一则标题为“在华为,请假一天的代价是3700”的帖子在网络上引发了热烈讨论,激起了网友们对工作与休息、收入与代价之间微妙关系的广泛关注。
故事起源于一位华为员工的分享,透露在华为,因为请假会影响到每月的奖金和年终奖,许多员工宁愿选择利用周末加班来“调休”,以避免请假对收入的影响。在华为,周末加班的报酬是双倍工资。

Image

换句话说,一天的请假,相当于放弃了两天的双倍日工资。根据这位员工的描述,我们可以粗略估计,华为员工的月基础工资约为37000元。
Image

Image

这一消息一经发布,立即在网上引起了广泛的讨论。有人感叹华为员工的高收入,有人则对比自己公司的请假政策,感慨万千。

尤其是那句“这么高的base,不是月薪3k的我应该讨论的事情”,更是引发了不少网友的共鸣,笑谈中透露出对高收入群体生活的遥远想象。

Image

Image

Image
但不可否认,这样的请假代价确实很高,足以让人感到“请假很心痛”。这不仅仅是金钱上的损失,更是对个人时间、健康与工作之间平衡的一种考验。

在华为这样的高强度工作环境中,如何合理安排工作与休息,确保身心健康,成为了每一位员工都需要面对的问题。

下面是今日算法题

今日算法题,来自LeetCode的第6题:Z 字形变换,下面是我的算法思路及实现,让我们来看看吧。
算法题目

将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。

比如输入字符串为 "PAYPALISHIRING",行数为 3 时,排列如下:

P   A   H   NA P L S I I GY   I   R

之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,如上例则为 "PAHNAPLSIIGYIR"。

算法思路

实现Z字形变换的关键是找到字符在Z字形排列中的规律,然后根据这个规律来重构字符串。以下是解决这个问题的步骤:

  1. 创建行字符串:根据给定的行数,创建相同数量的字符串,用于存放每一行的字符。

  2. 定位行索引:初始化当前行的索引为0,并设置一个标志位用于指示索引移动的方向(向下或向上)。

  3. 遍历字符:遍历输入字符串中的每一个字符,并将它添加到对应行的字符串上。

  • 如果当前行索引为0,设置标志位,使索引向下移动。

  • 如果当前行索引为给定行数减1,设置标志位,使索引向上移动。

  • 根据标志位更新行索引。

  • 合并行字符串:将所有行的字符串连接起来,形成最终的字符串。

  • 专属福利 
    👉点击领取:最全Python资料合集
    代码实现
    C语言实现
    #include <string.h>#include <stdlib.h>
    char* convert(char* s, int numRows) {if (numRows == 1 || numRows >= strlen(s)) return s;
    char **rows = malloc(numRows * sizeof(char*));for (int i = 0; i < numRows; i++) { rows[i] = malloc((strlen(s) + 1) * sizeof(char)); rows[i][0] = '\0'; }
    int curRow = 0;int step = -1;
    for (int i = 0; s[i] != '\0'; i++) {strcat(rows[curRow], (char[]){s[i], '\0'});if (curRow == 0 || curRow == numRows - 1) step = -step; curRow += step; }
    char *ret = malloc((strlen(s) + 1) * sizeof(char)); ret[0] = '\0';for (int i = 0; i < numRows; i++) {strcat(ret, rows[i]);free(rows[i]); }free(rows);return ret;}

    Java实现

    public String convert(String s, int numRows) {if (numRows == 1 || numRows >= s.length()) {return s;    }    StringBuilder[] rows = new StringBuilder[numRows];for (int i = 0; i < numRows; i++) rows[i] = new StringBuilder();
    int curRow = 0;boolean goingDown = false;
    for (char c : s.toCharArray()) { rows[curRow].append(c);if (curRow == 0 || curRow == numRows - 1) goingDown = !goingDown; curRow += goingDown ? 1 : -1; }
    StringBuilder ret = new StringBuilder();for (StringBuilder row : rows) ret.append(row);return ret.toString();}

    Python实现

    def convert(s: str, numRows: int) -> str:if numRows == 1 or numRows >= len(s):return s    rows = [''] * numRows    curRow, step = 0, -1for c in s:        rows[curRow] += cif curRow == 0 or curRow == numRows - 1:            step = -step        curRow += stepreturn ''.join(rows)

    算法解析

    Z字形变换算法的时间复杂度为O(n),其中n是输入字符串的长度,因为每个字符只被处理一次。空间复杂度也为O(n),用于存储重构后的字符串。

    示例和测试
    输入:s = "PAYPALISHIRING", numRows = 3输出:"PAHNAPLSIIGYIR"

    总结

    Z字形变换问题展示了如何通过找到字符间的规律来解决问题,它不仅锻炼了我们对字符串的处理能力,还教会我们如何将看似复杂的问题简化。掌握这种方法,可以帮助我们更好地解决其他字符串处理问题。

    Image
     1
    Image
    热门推荐

    Image