公司新来了一个领导,38岁,刚来就把我的工资从1w调到1.5w。。

文摘   2024-11-28 12:15   山西  

最近看到一个网友发帖,讲述了一件让人啼笑皆非的事情。

他说,公司新来了一个领导,38岁,一上任就给他加薪,从1w涨到1.5w。刚开始,他还以为领导搞错了,毕竟一般来说,换领导的第一反应不就是“新官上任三把火”嘛,怎么还可能给老员工加薪?结果,领导一开口说:“你是唯一的35岁老员工,咱们老人得互相帮忙。”

谁能想到,原本以为是打压年轻人、把年纪大的边缘化的公司,居然一上来就玩起了“同龄人联盟”?要是我是那位员工,估计心里也是一阵迷茫,愣是没想到年纪大竟然能换来加薪。
不过,评论区的网友倒是挺现实的,直接一针见血地说:“这下你跟他是一条船上的了,要是维护当权者,那可就必须得跟领导站在同一阵线,毕竟是既得利益者了。” 这话我觉得挺有道理的:既然有了这么大的“恩惠”,如果不支持领导,难道还要反对他吗?
总之,这种领导方式不常见,但也挺有意思的。能给员工带来实实在在的好处,或许也能让大家更愿意与公司共同成长吧。

算法题:删除无效的括号

今天我们来聊聊一个看似简单,实则有点坑的算法题:删除无效的括号。你可能想,这么简单,括号不配对就删了不就行了吗?不过,现实往往比想象复杂,尤其是在实际面试中,这类题目有时会给你带来“惊喜”。
题目描述很简单,给定一个包含括号的字符串,你需要删除掉其中的无效括号,返回一个有效的字符串。我们来看看一个示例:
输入:"(()())"输出:"(()())"
再看另一个例子:输入:"(())())"输出:"(())"
咋一看,这么简单吧?一个左括号遇到右括号配对就好,剩下的不合法的删掉。实际操作中要考虑的事情可多了。首先,要搞明白什么是有效括号。有效括号是指每一个左括号 ( 都有对应的右括号 ),并且括号配对必须是闭合的。

第一步:用栈来处理

作为程序员,做题时首先要想到栈这种数据结构。栈是处理括号问题的最佳工具之一,它能帮助我们追踪括号的匹配情况。想象一下,左括号 ( 就是入栈操作,而右括号 ) 则是出栈操作。如果栈空了却遇到右括号,说明右括号多余了,这时就需要将这个无效的右括号去掉。
这里的难点是我们不仅要删除无效括号,还需要返回一个有效的括号序列。所以我们不只是简单地删除,而是要遍历一遍字符串,确保遍历过程中每个左括号和右括号都能正确匹配。

代码实现

在Java中,我们可以用一个栈来实现这个过程,同时为了记录哪些字符需要被删除,我们可以用一个布尔数组来标记每个字符的位置是否需要删除。
代码大概是这样:
import java.util.Stack;

public class Solution {
    public String removeInvalidParentheses(String s) {
        Stack<Integer> stack = new Stack<>();
        boolean[] toDelete = new boolean[s.length()];
        
        // 第一遍遍历,检查不匹配的括号
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (c == '(') {
                stack.push(i); // 将左括号的索引入栈
            } else if (c == ')') {
                if (stack.isEmpty()) {
                    toDelete[i] = true// 右括号没有匹配的左括号,标记删除
                } else {
                    stack.pop(); // 匹配的括号出栈
                }
            }
        }

        // 将栈中剩下的左括号标记为删除
        while (!stack.isEmpty()) {
            toDelete[stack.pop()] = true;
        }

        // 构造最终的有效字符串
        StringBuilder result = new StringBuilder();
        for (int i = 0; i < s.length(); i++) {
            if (!toDelete[i]) {
                result.append(s.charAt(i)); // 只保留不需要删除的字符
            }
        }

        return result.toString();
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        String s = "(())())";
        System.out.println(solution.removeInvalidParentheses(s));  // 输出 "(())"
    }
}
解释一下代码:
  • 首先,我们用一个栈来存储左括号的索引,右括号遇到时从栈中弹出一个左括号的索引。如果右括号没有匹配的左括号,则将其标记为要删除。
  • 遍历完之后,栈里剩下的索引就是没有配对的左括号,需要标记为删除。
  • 最后,我们通过一个布尔数组来构建最终的有效字符串,删掉那些标记为需要删除的字符。

关键点

  1. 栈的作用:栈帮助我们追踪左括号的配对情况。当遇到右括号时,我们检查栈顶是否有匹配的左括号。
  2. 删除标记:通过布尔数组 toDelete 来标记哪些字符是无效的。这个方法比直接操作字符串更高效,因为字符串是不可变的,直接修改会造成性能浪费。
  3. 处理无效括号:无效的右括号和左括号都需要标记删除,确保最终输出的字符串是有效的。
这个方法的时间复杂度是O(n),其中n是字符串的长度。因为我们只遍历了一遍字符串,而且栈操作是O(1)的,所以整体性能不错。

结束语

这道题虽然表面看起来简单,但其实考察了我们对数据结构和算法的理解。栈这种常见的工具,实际上在很多括号相关的问题中都能派上用场。而且,像这样的字符串问题,常常是面试中的经典考点,所以,大家在准备面试时,别小看了这类看似简单的题目。

-END-


ok,今天先说到这,老规矩,给大家分享一份不错的副业资料,感兴趣的同学找我领取。

以上,就是今天的分享了,看完文章记得右下角给何老师点赞,也欢迎在评论区写下你的留言


程序媛山楂
5年+程序媛,专注于AI编程普及。本号主要分享AI编程、Chat账号、Chat教程、Sora教程、Suno AI、Sora账号、Sora提示词、AI换脸、AI绘画等,帮助解决各种AI疑难杂症。
 最新文章