有网友发帖称,自己月入四万多,却因极度反感上司而濒临抑郁,纠结是否该辞职。高薪与职场关系的矛盾,引发广泛共鸣。
这个问题本质在于:你当前的工作提供的是“金钱”还是“价值”。有人认为“钱能治愈部分痛苦”,也有人强调“健康远胜高薪”。两种观点皆有道理,关键取决于个人现阶段的核心目标。若主线是积累财富,那一定程度的委屈本就是薪资的一部分;但若已严重损害身心健康,则是在透支未来,得不偿失。
其实,“辞职”并非唯一选择。可以采取过渡策略:设定明确期限(如再坚持半年),在此期间继续积累收入,同时积极寻找更合适的岗位。这样既能保住高收入,又能避免情绪持续恶化。
算法题解析:一张长椅上最多能坐多少学生
题目描述:一排座位用字符串表示,'0'为空位,'1'为已坐人;给定整数k,要求任意两人之间至少间隔k个空位。目标是计算最多还能安排多少人入座。
例如,字符串“10001”,k=1时,中间三个空位只能再坐一人,否则无法满足安全距离。
解题思路:贪心算法
核心策略是按连续空位分段处理,根据不同位置采用不同计算方式:
开头连续空位(左侧无人):长度L,可容纳人数为 L / (k+1) 向下取整。 中间空位段(两侧已有人):长度M,需扣除两端各k个空位作为缓冲区,剩余可用长度为 M - 2k,可容纳 max(0, (M - 2k) / (k+1)) 人。 结尾连续空位(右侧无人):长度R,同开头,可容纳 R / (k+1) 人。
特殊情况:若整排无人,直接每隔k+1个位置安排一人,总数为 (n + k) / (k+1)。
Java 实现代码
以下实现时间复杂度O(n),空间复杂度O(m)(m为已坐人数),逻辑清晰,便于理解。
public class BenchMaxStudents {
// s: 座位,'0'空位 '1'有人;k: 两人之间至少隔k个空位
public static int maxAdditional(String s, int k) {
int n = s.length();
// 收集已坐的位置
java.util.List<Integer> ones = new java.util.ArrayList<>();
for (int i = 0; i < n; i++) {
if (s.charAt(i) == '1') ones.add(i);
}
// 如果没人坐,直接每隔k+1放一个
if (ones.isEmpty()) {
return (n + k) / (k + 1);
}
int add = 0;
// 左边开头的一段0:索引[0, firstOne-1],长度就是firstOne
int first = ones.get(0);
add += first / (k + 1);
// 中间的缝隙:相邻1之间的0段长度 gap = ones[i] - ones[i-1] - 1
for (int i = 1; i < ones.size(); i++) {
int gap = ones.get(i) - ones.get(i - 1) - 1;
int usable = gap - 2 * k; // 两端各让出k
if (usable > 0) {
add += usable / (k + 1);
}
}
// 右边结尾的一段0:索引[lastOne+1, n-1],长度 n-1 - lastOne
int last = ones.get(ones.size() - 1);
int tail = (n - 1) - last;
add += tail / (k + 1);
return add;
}
// 小玩具测一下
public static void main(String[] args) {
System.out.println(maxAdditional("10001", 1)); // 中间有3个0,只能再坐1个 -> 1
System.out.println(maxAdditional("00000", 1)); // 每隔2坐一个 -> 3
System.out.println(maxAdditional("010010", 2)); // 算算看 -> 0
System.out.println(maxAdditional("0001000", 1)); // 左右都能塞 -> 2
}
}
注意中间段公式应为 (gap - 2k) / (k+1),若误写为 (gap - k) / (k+1),在边界情况下容易多算一人。此外,处理长字符串时建议逐字符扫描,避免频繁子串操作,提升效率。

