大数跨境
0
0

特别讨厌自己的上司,几乎快抑郁了,但是月收入有4万多,到底该不该辞职?

特别讨厌自己的上司,几乎快抑郁了,但是月收入有4万多,到底该不该辞职? 程序员老鬼
2025-09-16
19

有网友发帖称,自己月入四万多,却因极度反感上司而濒临抑郁,纠结是否该辞职。高薪与职场关系的矛盾,引发广泛共鸣。

这个问题本质在于:你当前的工作提供的是“金钱”还是“价值”。有人认为“钱能治愈部分痛苦”,也有人强调“健康远胜高薪”。两种观点皆有道理,关键取决于个人现阶段的核心目标。若主线是积累财富,那一定程度的委屈本就是薪资的一部分;但若已严重损害身心健康,则是在透支未来,得不偿失。

其实,“辞职”并非唯一选择。可以采取过渡策略:设定明确期限(如再坚持半年),在此期间继续积累收入,同时积极寻找更合适的岗位。这样既能保住高收入,又能避免情绪持续恶化。

算法题解析:一张长椅上最多能坐多少学生

题目描述:一排座位用字符串表示,'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),在边界情况下容易多算一人。此外,处理长字符串时建议逐字符扫描,避免频繁子串操作,提升效率。

【声明】内容源于网络
0
0
程序员老鬼
1234
内容 1672
粉丝 0
程序员老鬼 1234
总阅读11.6k
粉丝0
内容1.7k