体面厂不再"体面",全员会议,传递寒气

教育   2025-01-03 15:44   广东  

体面厂

临近过年,其他厂如果不像京东,大肆宣传自己落实福利到位(动辄就是 16/18/20 薪啥的),那至少也是保持沉默。

如今,一直以"体面厂"自称的安防领域龙头公司,却召开全员会,向员工们传递"寒气"。

这是打算把自封的"体面厂"称号亲手拿掉吗?

我相信,不用高管表示对未来感到悲观,员工也会感受到 🤣🤣

我还记得,两个月前,我们发文聊到"体面厂"今年校招开奖情况(普遍下降,薪资水平对比市场,属于中下游)时,有海康员工现身说法,表示"体面厂"薪水低但胜在稳定,当时组内 8 个人,现在还有 5 个在职,并且都有两套房了。

先不考虑两套房是因为"稳定",还是因为"时代红利",但至少目前这种"稳定"也开始摇摇欲坠了。

如果一个公司取消一直以来的福利传统,一定程度可以理解为是想往加大内卷力度,加大自然淘汰的方向发展。

对此,你怎么看?你司有"普调"机制吗?欢迎评论区交流。

...

回归主题。

周五,来一道简单算法题。

题目描述

平台:LeetCode

题号:890

你有一个单词列表 words 和一个模式 pattern,你想知道 words 中的哪些单词与模式匹配。

如果存在字母的排列 p ,使得将模式中的每个字母 x 替换为 p(x) 之后,我们就得到了所需的单词,那么单词与模式是匹配的。

回想一下,字母的排列是从字母到字母的双射:每个字母映射到另一个字母,没有两个字母映射到同一个字母。

返回 words 中与给定模式匹配的单词列表。

你可以按任何顺序返回答案。

示例:

输入:words = ["abc","deq","mee","aqq","dkd","ccc"], pattern = "abb"

输出:["mee","aqq"]

解释:
"mee" 与模式匹配,因为存在排列 {a -> m, b -> e, ...}。
"ccc" 与模式不匹配,因为 {a -> c, b -> c, ...} 不是排列。
因为 a 和 b 映射到同一个字母。

提示:

哈希表

为了方便,我们用 ws 代指 words,用 pe 代指 pattern

根据题意进行模拟即可,使用 map 记录具体的映射关系,使用 vis 记录哪些字符已被映射,利用字符集大小只有 ,我们可以使用数组充当哈希表。

Java 代码:

class Solution {
    public List<String> findAndReplacePattern(String[] ws, String pe) {
        List<String> ans = new ArrayList<>();
        int[] map = new int[26], vis = new int[26];
        for (String s : ws) {
            Arrays.fill(map, -1);
            Arrays.fill(vis, 0);
            boolean ok = true;
            for (int i = 0; i < pe.length() && ok; i++) {
                int c1 = s.charAt(i) - 'a', c2 = pe.charAt(i) - 'a';
                if (map[c1] == -1 && vis[c2] == 0) {
                    map[c1] = c2; vis[c2] = 1;
                } else if (map[c1] != c2) ok = false;
            }
            if (ok) ans.add(s);
        }
        return ans;
    }
}

C++ 代码:

class Solution {
public:
    vector<stringfindAndReplacePattern(vector<string>& ws, string pe) {
        vector<string> ans;
        vector<intmap(26-1)vis(260);
        for (const auto& s : ws) {
            fill(map.begin(), map.end(), -1);
            fill(vis.begin(), vis.end(), 0);
            bool ok = true;
            for (size_t i = 0; i < pe.length() && ok; i++) {
                int c1 = s[i] - 'a', c2 = pe[i] - 'a';
                if (map[c1] == -1 && vis[c2] == 0) {
                    map[c1] = c2; vis[c2] = 1;
                } else if (map[c1] != c2) ok = false;
            }
            if (ok) ans.push_back(s);
        }
        return ans;
    }
};

Python 代码:

class Solution:
    def findAndReplacePattern(self, ws: List[str], pe: str) -> List[str]:
        ans = []
        mapping, vis = [-1] * 26, [0] * 26
        for s in ws:
            mapping, vis = [-1] * 26, [0] * 26
            ok = True
            for i in range(len(pe)):
                c1, c2 = ord(s[i]) - ord('a'), ord(pe[i]) - ord('a')
                if mapping[c1] == -1 and vis[c2] == 0:
                    mapping[c1], vis[c2] = c2, 1
                elif mapping[c1] != c2:
                    ok = False
            if ok:
                ans.append(s)
        return ans

TypeScript 代码:

function findAndReplacePattern(ws: string[], pe: string): string[] {
    const ans = [];
    for (const s of ws) {
        const map = new Array(26).fill(-1);
        const vis = new Array(26).fill(0);
        let ok = true;
        for (let i = 0; i < (pe as string).length && ok; i++) {
            const c1 = s.charCodeAt(i) - 'a'.charCodeAt(0), c2 = pe.charCodeAt(i) - 'a'.charCodeAt(0);
            if (map[c1] === -1 && vis[c2] === 0) {
                map[c1] = c2; vis[c2] = 1;
            } else if (map[c1] !== c2) {
                ok = false;
            }
        }
        if (ok) ans.push(s);
    }
    return ans;
};
  • 时间复杂度:,其中 代表字符集大小
  • 空间复杂度:

最后

巨划算的 LeetCode 会员优惠通道目前仍可用 ~

使用福利优惠通道 leetcode.cn/premium/?promoChannel=acoier,年度会员 有效期额外增加两个月,季度会员 有效期额外增加两周,更有超大额专属 🧧 和实物 🎁 福利每月发放。

我是宫水三叶,每天都会分享算法知识,并和大家聊聊近期的所见所闻

欢迎关注,明天见。



宫水三叶的刷题日记
锐评时事热点的 算法与数据结构 题解区博主。「 刷穿 LeetCode 」系列文章原创公众号。
 最新文章