当前位置: 欣欣网 > 码农

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

2024-03-02码农

最近,「在华为,请假一天的代价是3700」的帖子在网络上引发了热烈讨论。

一位华为员工的分享,透露在华为,因为请假会影响到每月的奖金和年终奖,许多员工宁愿选择利用周末加班来「调休」,以避免请假对收入的影响。在华为,周末加班的报酬是双倍工资。

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

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

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

但不可否认,这样的请假代价确实很高,足以让人感到「请假很心痛」。

下面是今日算法题

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

# 算法题目

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

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

PA H NAP L S I I GYI R

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

# 算法思路

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

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

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

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

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

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

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

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

  • # 代码实现

    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实现

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

    # 算法解析

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

    # 示例和测试

    输入:s = "PAYPALISHIRING", numRows = 3输出:"PAHNAPLSIIGYIR"

    # 总结

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

    热门推荐