同事40岁被裁员,签了保密协议,每个月给88000补贴,连续给12个月,第二年减半,不能去同行公司,担心自己在家呆两年就废了!
刚看到个贴子,说一位同事40岁被裁,签了保密协议,不能去同行,但公司给了第一年每月88000、第二年减半的补贴。他自己却担心在家两年会废掉。
怎么说呢,从我的角度看,与其担心两年会不会废,不如趁这段“被迫休息”的时间补技能、补知识、补身体。人不能闲太久,就像车长期不发动也会生锈,但只要你定期保持行动,状态就不至于掉得太快。
换个角度想,公司舍得掏这么多钱,也说明这位同事过去确实是有价值的,那就更没必要怀疑自己。职业生涯是马拉松,不是谁40岁被裁就完蛋了,关键在于你后面还能不能重新启动。【备注:文末可领最新资料】
面试题:H 指数
H 指数这个名字听着有点学术,其实事儿特别简单:
有个人发了很多论文,每篇论文被引用了多少次都有个数字,比如:
[3, 0, 6, 1, 5]
H 指数的定义是:
找一个最大的整数 h,满足:至少有 h 篇论文,它们的引用次数都 不少于 h。
上面这个例子里,答案是 3:
至少有 3 篇论文,引用次数 ≥ 3(比如 3,5,6) 但是想要 h = 4 就不行了,因为引用 ≥ 4 的论文只有 2 篇(5 和 6)
所以返回 3。
题目一般就是:给你一个 int[] citations,每个元素是第 i 篇论文被引用的次数,问你 H 指数是多少。
最常用的思路:排序 + 从后往前扫
最容易想明白的一种写法,就是先把数组排个序,然后利用“右边论文数量”的特点来算。
步骤可以这么理解:
把 citations升序排序,比如:[0, 1, 3, 5, 6]对于下标 i这个位置,右边连同自己一共有n - i篇论文,它们的引用都 ≥citations[i]如果此时 citations[i] >= n - i,说明我们 至少 有n - i篇论文,每篇引用都 ≥n - i, 那么这个n - i就是一个合法的 H 值我们要的又是“最大”的 h,所以从左到右扫到第一个满足条件的位置, n - i就是答案(因为左边的n - i更大)
举上面例子:
数组 [0, 1, 3, 5, 6],长度n = 5i = 0: citations[0] = 0,右边论文数 = 5,0 >= 5不成立i = 1:值 = 1,右边论文数 = 4, 1 >= 4不成立i = 2:值 = 3,右边论文数 = 3, 3 >= 3✅ 成立 说明有 3 篇论文引用 ≥ 3,直接返回 3。
用上面的思路,代码非常短:
import java.util.Arrays;
publicclassSolution{
publicinthIndex(int[] citations){
if (citations == null || citations.length == 0) {
return0;
}
Arrays.sort(citations); // 升序排序
int n = citations.length;
for (int i = 0; i < n; i++) {
int papers = n - i; // 从当前这篇开始,右边一共有多少篇论文
if (citations[i] >= papers) {
// 找到第一个满足条件的位置,papers 就是最大的 h
return papers;
}
}
// 如果上面的条件一次都没触发,说明所有论文引用数都太小,h 指数就是 0
return0;
}
publicstaticvoidmain(String[] args){
Solution s = new Solution();
System.out.println(s.hIndex(newint[]{3, 0, 6, 1, 5})); // 输出 3
System.out.println(s.hIndex(newint[]{0, 0, 0})); // 输出 0
System.out.println(s.hIndex(newint[]{10, 8, 5, 4, 3}));// 输出 4
}
}
复杂度也很直接:
排序是 O(n log n)单次遍历是 O(n)总体就是 O(n log n),面试和实战几乎都够用了。
如果你想把时间复杂度压到 O(n),其实可以用“计数桶”的方式:
开一个长度为 n + 1的数组cnt所有大于等于 n 的引用次数都算到 cnt[n]里,其他的根据引用次数计数然后从后往前累加,看“引用次数 ≥ k 的论文有多少篇”,第一个满足条件的 k 就是答案
这个思路稍微绕一点,但面试官要是说“能不能做到线性”,你就可以顺着这个方向聊下去。
整体来说,先把排序写熟练,再根据需要考虑桶计数版,H 指数这题就拿稳了。
-END-
我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html