就业 or 考研
就业还是考研,是前几年讨论得很多的话题。
但随着当年选择考研(并成功上岸)的同学陆续就业,发现根本不是「读完研后月薪涨多涨少」的问题,而是「当年那些大量招聘的公司,现在 HC 还有没有」的问题。
除了市面上 HC 数量不如读研前(就业竞争更加激烈)以外,更加刺痛选择读研同学的是,即使找到了工作,入职后的 mentor 可能就是当年本科毕业后选择就业的同届小伙伴 🤣🤣🤣
渐渐地,大家发现:所谓的「考研上岸」根本不是真正意义上的上岸,「考公上岸」才是。
但哪又有这么多的体制内岗位呢?
于是肉眼可见的,这两年的"考研热"开始降温:
虽然时代趋势如此,但将其生硬的套在个人身上,也不完全合适。
因此,时常还是会有同学会在网上发问,自己的情况,是适合考研,还是适合就业。希望有过来人能够帮忙分析一下。
这次发帖的小伙伴,是哈工大大三学生,当前学分绩处于保研的边缘,同时感觉自己在技术上的积累比较单薄。楼主之前在网上有听过"行情越差学历越重要"的说法,加上家里的思维相对传统,认为读个 985 不读硕蛮亏的。于是发起了「准备就业 or 准备考研」的投票,希望网友们给给意见。
其实从楼主的文字描述来看,自己内心是比较倾向于「考研」,但投票结果压倒性地倾向「就业」一方。
虽然参与投票的人不少,有两百多号人,但有在评论区给出分析意见的,一个没有,留言人数不足 20 个,几乎都是简单一两句话的那种。
如果你问我,我会建议「准备就业」,理由就是前面说的。目前看来,考研性价比不高,不是所有人都能进入体制内,将就业时间后移,不确定性只会更大。
对此,你怎么看?你会投「就业」还是「考研」?理由是什么?欢迎评论区交流。
...
回归主题。
周末,来一道简单算法题。
题目描述
平台:LeetCode
题号:929
每个有效电子邮件地址都由一个本地名和一个 域名组成,以 '@'
符号分隔。除小写字母之外,电子邮件地址还可以含有一个或多个 '.'
或 '+'
。
- 例如,在
alice@leetcode.com
中,alice
是本地名,而leetcode.com
是域名。
如果在电子邮件地址的本地名部分中的某些字符之间添加句点('.'
),则发往那里的邮件将会转发到本地名中没有点的同一地址。请注意,此规则不适用于域名。
- 例如,
"alice.z@leetcode.com"
和"alicez@leetcode.com"
会转发到同一电子邮件地址。
如果在本地名中添加加号('+'
),则会忽略第一个加号后面的所有内容。这允许过滤某些电子邮件。同样,此规则不适用于域名。
- 例如
m.y+name@email.com
将转发到my@email.com
。
可以同时使用这两个规则。
给你一个字符串数组 emails
,我们会向每个 emails[i]
发送一封电子邮件。返回实际收到邮件的不同地址数目。
示例 1:
perl
输入:emails = ["test.email+alex@leetcode.com","test.e.mail+bob.cathy@leetcode.com","testemail+david@lee.tcode.com"]
输出:2
解释:实际收到邮件的是 "testemail@leetcode.com" 和 "testemail@lee.tcode.com"。
示例 2:
perl
输入:emails = ["a@leetcode.com","b@leetcode.com","c@leetcode.com"]
输出:3
提示:
- <math xmlns="http://www.w3.org/1998/Math/MathML"> 1 < = e m a i l s . l e n g t h < = 100 1 <= emails.length <= 100 </math>1<=emails.length<=100
- <math xmlns="http://www.w3.org/1998/Math/MathML"> 1 < = e m a i l s [ i ] . l e n g t h < = 100 1 <= emails[i].length <= 100 </math>1<=emails[i].length <=100
emails[i]
由小写英文字母、'+'
、'.'
和'@'
组成- 每个
emails[i]
都包含有且仅有一个'@'
字符 - 所有本地名和域名都不为空
- 本地名不会以
'+'
字符作为开头
模拟
纯纯模拟题,优雅与否主要看代码能力。
Java 代码:
Java
class Solution {
public int numUniqueEmails(String[] emails) {
Set<String> set = new HashSet<>();
for (String s : emails) {
StringBuilder sb = new StringBuilder();
int n = s.length(), i = 0;
boolean ok = true;
while (i < n) {
char c = s.charAt(i);
if (c == '@') break;
if (c == '.' && ++i >= 0) continue;
if (c == '+') ok = false;
if (ok) sb.append(c);
i++;
}
set.add(sb.append(s.substring(i)).toString());
}
return set.size();
}
}
C++ 代码:
C++
class Solution {
public:
int numUniqueEmails(vector<string>& emails) {
unordered_set<string> set;
for (string& s : emails) {
string sb;
int n = s.length(), i = 0;
bool ok = true;
while (i < n) {
char c = s[i];
if (c == '@') break;
if (c == '.' && ++i >= 0) continue;
if (c == '+') ok = false;
if (ok) sb += c;
i++;
}
set.insert(sb + s.substr(i));
}
return set.size();
}
};
Python 代码:
Python
class Solution:
def numUniqueEmails(self, emails: List[str]) -> int:
sset = set()
for s in emails:
sb = ""
ok = True
for i, c in enumerate(s):
if c == '@': break
if c == '.' and i + 1 < len(s): continue
if c == '+': ok = False
if ok: sb += c
sset.add(sb + s[i:])
return len(sset)
TypeScript 代码:
TypeScript
function numUniqueEmails(emails: string[]): number {
const set = new Set<string>();
for (const s of emails) {
let sb = "";
let n = s.length, i = 0;
let ok = true;
while (i < n) {
const c = s[i];
if (c === '@') break;
if (c === '.' && ++i >= 0) continue;
if (c === '+') ok = false;
if (ok) sb += c;
i++;
}
set.add(sb + s.substring(i));
}
return set.size;
};
- 时间复杂度: <math xmlns="http://www.w3.org/1998/Math/MathML"> O ( ∑ i = 0 n − 1 l e n ( e m a i l s [ i ] ) ) O(\sum_{i = 0}^{n - 1} len(emails[i])) </math>O(∑i=0n−1len(emails[i]))
- 空间复杂度: <math xmlns="http://www.w3.org/1998/Math/MathML"> O ( ∑ i = 0 n − 1 l e n ( e m a i l s [ i ] ) ) O(\sum_{i = 0}^{n - 1} len(emails[i])) </math>O(∑i=0n−1len(emails[i]))