身处奇瑞看三星:既“开卷“又“起火“,却更难受了

三星"起火"

这几天奇瑞的事情,让大家破防了,纷纷表示国内的就业市场环境普遍恶劣。

那我们转个眼,看看海外企业的情况。

最近一周,三星频频登上新闻,颇有"起火"之势。

在刚步入下半年的 7 月 1 日,三星就向韩国雇佣劳动部提交特别申请:要求延长 IT、人工智能开发、Micro 项目团队等部门的工作时间,将上限调整为每周 64 小时。目前韩国劳动法规的每周工作时长上限是 52 小时。

至于三星"开卷"的原因,业内人员分析,大致是因为面对日益激烈的 OLED 业务,不得已做的战略调整。

个人觉得这分析有点站不住脚,三星作为一家成立了超过半个世纪的公司,是「技术驱动」的典范,因为竞争激烈就将战略调整为「增加员工工作时间,大力出奇迹」,不太符合一贯作风,我更愿意相信这是高管更替,导致的决策差异。既然如此,建议韩国把我们国内的 996 文化借鉴过去,全力申遗,并全国推广。

哪里有压迫,哪里就有反抗。

也是 7 月 1 日,三星的工会发起总罢工,要求增加带薪年假和薪酬提升。

这是三星(1938 年)成立以来的首次罢工,涉及人员超过 2.8 万人。

三星工会的诉求十分简单直接:加薪幅度从 5.1% 提升至 6.5%,额外增加一天的带薪年假。若要求不能得到满足,全面罢工将会持续下去。简单来说就是:不给钱,不干活。

由此可见,无论国内还是海外,劳务纠纷都是普遍存在的。

只不过有人选择了忍让,有人选择了反抗。

...

回归主题。

来一道拷打周四的题目。

题目描述

平台:LeetCode

题号:592

给定一个表示分数加减运算的字符串 expression,你需要返回一个字符串形式的计算结果。

这个结果应该是不可约分的分数,即最简分数。 如果最终结果是一个整数,例如 2,你需要将它转换成分数形式,其分母为 1。所以在上述例子中, 2 应该被转换为 2/1

示例 1:

输入: expression = "-1/2+1/2"

输出: "0/1"

示例 2:

输入: expression = "-1/2+1/2+1/3"

输出: "1/3"

示例 3:

输入: expression = "1/3-1/2"

输出: "-1/6"

提示:

  • 输入和输出字符串只包含  '0' 到  '9' 的数字,以及  '/', '+' 和  '-'
  • 输入和输出分数格式均为  ±分子/分母。如果输入的第一个分数或者输出的分数是正数,则  '+' 会被省略掉。
  • 输入只包含合法的最简分数,每个分数的分子与分母的范围是  。 如果分母是 1,意味着这个分数实际上是一个整数。
  • 输入的分数个数范围是 。
  • 最终结果的分子与分母保证是 32 位整数范围内的有效整数。

表达式计算

为了方便,令 expressions

由于给定的表达式中只有 +-,因此无须考虑优先级问题,直接从前往后计算即可。

使用变量 ans 代指计算过程中的结果,从前往后处理表达式 s,每次以 ±分子/分母 的形式取出当前操作数(若为表达式的首个操作数,且为正数时,需要手动补一个 +)。

假设当前取出的操作数为 num,根据 ans 的情况进行运算:

  • ans 为空串,说明 num 是首个操作数,直接将 num 赋值给 ans 即可
  • ans 不为空串,此时计算 numans 的计算结果赋值给 ans

考虑实现一个计算函数 String calc(String a, String b) 计算两个操作 ab 的结果,其中入参 ab 以及返回值均满足 ±分子/分母 形式。

首先通过读取 ab 的首个字符,得到两操作数的正负情况。若为一正一负,通过交换的形式,确保 a 为正数,b 为负数。

然后通过 parse 方法拆解出字符串操作数的分子和分母,parse 使用指针扫描的方式实现即可,以数组形式将结果返回(第 0 位为分子数值,第 1 位分母数值)。

假设操作数 a 对应的值为 p[0]/p[1],操作数的值为 q[0]/q[1],先将其转换为 p[0]*q[1] / p[1]*q[1]q[0]*p[1] / q[1]*p[1],进行运算后,再通过求最大公约数 gcd 的方式进行化简。

Java 代码:

class Solution {
    public String fractionAddition(String s) {
        int n = s.length();
        char[] cs = s.toCharArray();
        String ans = "";
        for (int i = 0; i < n; ) {
            int j = i + 1;
            while (j < n && cs[j] != '+' && cs[j] != '-') j++;
            String num = s.substring(i, j);
            if (cs[i] != '+' && cs[i] != '-') num = "+" + num;
            if (!ans.equals("")) ans = calc(num, ans);
            else ans = num;
            i = j;
        }
        return ans.charAt(0) == '+' ? ans.substring(1) : ans;
    }
    String calc(String a, String b) {
        boolean fa = a.charAt(0) == '+', fb = b.charAt(0) == '+';
        if (!fa && fb) return calc(b, a);
        long[] p = parse(a), q = parse(b);
        long p1 = p[0] * q[1], q1 = q[0] * p[1];
        if (fa && fb) {
            long r1 = p1 + q1, r2 = p[1] * q[1], c = gcd(r1, r2);
            return "+" + (r1 / c) + "/" + (r2 / c);
        } else if (!fa && !fb) {
            long r1 = p1 + q1, r2 = p[1] * q[1], c = gcd(r1, r2);
            return "-" + (r1 / c) + "/" + (r2 / c);
        } else {
            long r1 = p1 - q1, r2 = p[1] * q[1], c = gcd(Math.abs(r1), r2);
            String ans = (r1 / c) + "/" + (r2 / c);
            if (p1 >= q1) ans = "+" + ans;
            return ans;
        }
    }
    long[] parse(String s) {
        int n = s.length(), idx = 1;
        while (idx < n && s.charAt(idx) != '/') idx++;
        long a = Long.parseLong(s.substring(1, idx)), b = Long.parseLong(s.substring(idx + 1));
        return new long[]{a, b};
    }
    long gcd(long a, long b) {
        return b == 0 ? a : gcd(b, a % b);
    }
}

C++ 代码:

class Solution {
public:
    string fractionAddition(string s) {
        int n = s.length();
        string ans = "";
        for (int i = 0; i < n; ) {
            int j = i + 1;
            while (j < n && s[j] != '+' && s[j] != '-') j++;
            string num = s.substr(i, j - i);
            if (s[i] != '+' && s[i] != '-') num = "+" + num;
            if (!ans.empty()) ans = calc(num, ans);
            else ans = num;
            i = j;
        }
        return ans.front() == '+' ? ans.substr(1) : ans;
    }
    string calc(string a, string b) {
        bool fa = a.front() == '+', fb = b.front() == '+';
        if (!fa && fb) return calc(b, a);
        auto p = parse(a), q = parse(b);
        long long p1 = p.first * q.second, q1 = q.first * p.second;
        if (fa && fb) {
            long long r1 = p1 + q1, r2 = p.second * q.second, c = gcd(r1, r2);
            return "+" + to_string(r1 / c) + "/" + to_string(r2 / c);
        } else if (!fa && !fb) {
            long long r1 = p1 + q1, r2 = p.second * q.second, c = gcd(r1, r2);
            return "-" + to_string(r1 / c) + "/" + to_string(r2 / c);
        } else {
            long long r1 = p1 - q1, r2 = p.second * q.second, c = gcd(abs(r1), r2);
            string ans = to_string(r1 / c) + "/" + to_string(r2 / c);
            if (p1 >= q1) ans = "+" + ans;
            return ans;
        }
    }
    pair<long longlong longparse(string s) {
        int idx = 1;
        while (idx < s.length() && s[idx] != '/') idx++;
        long long a = stoll(s.substr(1, idx - 1)), b = stoll(s.substr(idx + 1));
        return {a, b};
    }
    long long gcd(long long a, long long b) {
        return b == 0 ? a : gcd(b, a % b);
    }
};

TypeScript 代码:

function fractionAddition(s: string): string {
    const n = s.length
    let ans = ""
    for (let i = 0; i < n; ) {
        let j = i + 1
        while (j < n && s[j] != '+' && s[j] != '-') j++
        let num = s.substring(i, j)
        if (s[i] != '+' && s[i] != '-') num = "+" + num
        if (ans != "") ans = calc(num, ans)
        else ans = num
        i = j
    }
    return ans[0] == "+" ? ans.substring(1) : ans
};
function calc(a: string, b: string): string {
    const fa = a[0] == "+", fb = b[0] == "+"
    if (!fa && fb) return calc(b, a)
    const p = parse(a), q = parse(b)
    const p1 = p[0] * q[1], q1 = q[0] * p[1]
    if (fa && fb) {
        const r1 = p1 + q1, r2 = p[1] * q[1], c = gcd(r1, r2)
        return "+" + (r1 / c) + "/" + (r2 / c)
    } else if (!fa && !fb) {
        const r1 = p1 + q1, r2 = p[1] * q[1], c = gcd(r1, r2)
        return "-" + (r1 / c) + "/" + (r2 / c)
    } else {
        const r1 = p1 - q1, r2 = p[1] * q[1], c = gcd(Math.abs(r1), r2)
        let ans = (r1 / c) + "/" + (r2 / c)
        if (p1 > q1) ans = "+" + ans
        return ans
    }
}
function parse(s: string): number[] {
    let n = s.length, idx = 1
    while (idx < n && s[idx] != "/") idx++
    const a = Number(s.substring(1, idx)), b = Number(s.substring(idx + 1))
    return [a, b]
}
function gcd(a: number, b: number): number {
    return b == 0 ? a : gcd(b, a % b)
}
  • 时间复杂度:
  • 空间复杂度:

最后

巨划算的 LeetCode 会员优惠通道目前仍可用 ~

使用福利优惠通道 leetcode.cn/premium/?promoChannel=acoier,年度会员 有效期额外增加两个月,季度会员 有效期额外增加两周,更有超大额专属 🧧 和实物 🎁 福利每月发放。

我是宫水三叶,每天都会分享算法知识,并和大家聊聊近期的所见所闻

欢迎关注,明天见。

更多更全更热门的「笔试/面试」相关资料可访问排版精美的 合集新基地 🎉🎉

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/40788.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++之boost智能指针

1、boost智能指针 资源获取即初始化&#xff1a;在构造函数中对资源进行初始化&#xff0c;在析构函数中释放。 智能指针的本质思想是&#xff1a;将堆对象的生存期&#xff0c;用栈对象来管理。这个栈对象就是智能指针。 当new 一个堆对象的时候&#xff0c;立刻用智能指针…

AI免费文档处理在线工具:文档总结;论文阅读

1、文档总结 NoteGPT 支持各种类型文档ppt、word、pdf等总结 https://notegpt.io/pdf-summary 另外各种大模型工具一般都支持文档上传总结&#xff1a; 例如kimi、通义等 参考&#xff1a;https://blog.csdn.net/weixin_42357472/article/details/138205261 2、论文阅读 h…

Sylar服务器框架——Http模块

1、http.h 定义了HttpMethod和HttpStatus /* Request Methods */ #define HTTP_METHOD_MAP(XX) \XX(0, DELETE, DELETE) \XX(1, GET, GET) \XX(2, HEAD, HEAD) \XX(3, POST, POST) \XX(4, PUT, …

plugin:vite:import-analysis]No known conditions for“./lib/locale/lang/zh-cn“

将原有引入&#xff1a; import zhCn from element-plus/lib/locale/lang/zh-cn 改成&#xff1a; import zhCn from element-plus/es/locale/lang/zh-cn; 原因版本升级&#xff0c;引入路径改变&#xff08;原先的包在node_modules\element-plus\lib找不到&#xff09; 新…

c++习题09-分离整数的各个数

目录 一&#xff0c;题目 二&#xff0c;思路 三&#xff0c;代码 一&#xff0c;题目 二&#xff0c;思路 一开始我想到的是将简单容易输出的1000以内的数先进行相应的运算&#xff0c;再输出之后再对1000以上的数字进行判断&#xff08;主要还是想先将很大的数变小&#x…

Apache Commons 读写 CSV 文件

文章目录 一、Maven 引入二、代码实现 一、Maven 引入 <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-csv --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-csv</artifactId><versio…

富格林:当心欺诈耽误顺利出金

富格林悉知&#xff0c;在交易中有亏损情况的投资者大多是因为被出金骗局的说辞所欺诈&#xff0c;真以为自己躺着就能赚到钱&#xff0c;到头来却发现血本无归。在此提醒投资者&#xff0c;市场变化是复杂的。如果想做好黄金投资&#xff0c;必须掌握必要的交易技巧。同时要树…

如何自动筛选螺丝不良品?

四角螺丝是一种特殊设计的螺丝&#xff0c;其螺纹头部呈四个平行的角状结构&#xff0c;与传统的六角螺丝相比具有独特的外观和功能。这种设计使得四角螺丝在安装和拆卸时更容易使用&#xff0c;并提供了更好的扭矩传递效率。四角螺丝头部呈现四个平行的角&#xff0c;与常见的…

detectron2使用总结 |使用detectron2构造 Faster RCNN 和 Mask RCNN 进行目标检测

模型的初始化 detectron2中模型的结构由 cfg 参数决定&#xff0c;而 cfg 的内容来自 configs 中的配置文件。 cfg.merge_from_file(model_zoo.get_config_file("COCO-Detection/faster_rcnn_R_50_FPN_1x.yaml"))meta_arch cfg.MODEL.META_ARCHITECTURE 得到的是一…

如何通过IP地址查询地理位置及运营商信息

在数字时代&#xff0c;IP地址&#xff08;Internet Protocol Address&#xff0c;互联网协议地址&#xff09;已经成为我们日常网络活动的重要组成部分。每台连接到互联网的设备都被分配了一个唯一的IP地址&#xff0c;它不仅可以识别设备&#xff0c;还可以揭示设备的地理位置…

图像信号处理器(ISP)基础算法及处理流程

&#x1f4aa; 专业从事且热爱图像处理&#xff0c;图像处理专栏更新如下&#x1f447;&#xff1a; &#x1f4dd;《图像去噪》 &#x1f4dd;《超分辨率重建》 &#x1f4dd;《语义分割》 &#x1f4dd;《风格迁移》 &#x1f4dd;《目标检测》 &#x1f4dd;《暗光增强》 &a…

传输距离3000M|低延迟|48K采样音频传输模块-SA356大功率发射模块

无线音频应用中&#xff0c;远距离音频传输在许多领域具有广泛的应用需求&#xff0c;例如大型会议系统、公共广播、户外活动和音乐演出等。为了满足这些需求&#xff0c;音频传输模块需要具备一些关键特性&#xff0c;包括长距离传输能力、高音质、低延迟、稳定性以及抗干扰能…

fastzdp_login的第一次构建

概述 为了方便能够快捷的实现fastapi实现登录相关功能代码开发&#xff0c;决定开发一个开源的fastapi组件库&#xff0c;想了很多个名字&#xff0c;在检查pypi的时候发现都被占用了&#xff0c;所以最终决定使用fastzdp_login这个名字。 fast代表的时fastapi。zdp代表的是张…

Springboot与xxl-job

一、下载xxl-job项目 XXL-JOB是一个分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线&#xff0c;开箱即用。 从GitHub上面将项目clone下来&#xff0c;如果网络问题导致速度慢也可以从Gitee上面拉…

JavaScript中的立即执行函数表达式(Immediately Invoked Function Expression, IIFE)

聚沙成塔每天进步一点点 本文回顾 ⭐ 专栏简介JavaScript中的立即执行函数表达式&#xff08;Immediately Invoked Function Expression, IIFE&#xff09;1. 引言2. IIFE的概念2.1 概述2.2 语法2.3 历史背景 3. IIFE的作用3.1 创建独立作用域3.2 模块化代码3.3 防止变量提升3.…

SAPUI5基础知识10 - i18与国际化

1. 背景 i18n 是 “internationalization” 的缩写&#xff0c;其中的 18 是 “internationalization” 这个单词中间的字符数。i18n 是一种让应用程序支持多种语言的方法&#xff0c;也就是我们通常所说的国际化。 在SAPUI5中&#xff0c;i18n主要通过使用资源模型&#xff…

跑腿平台小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;基础数据管理&#xff0c;管理员管理&#xff0c;接单详情管理&#xff0c;跑腿员管理&#xff0c;跑腿任务管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;跑腿任务&#xff0c;接单员&…

Puppy Linux-最小的操作系统-仍然在更新32位设备的支持

Puppy Linux 是一个独特的 Linux 发行版家族&#xff0c;旨在为家用电脑用户服务。它最初由 Barry Kauler 在 2003 年创建。 Puppy Linux 的优势 即用性 → 包含了所有常见日常计算使用的工具。 易用性 → 包含大量帮助和提示。 相对小的体积 → 通常少于 500 MB。 快速且多…

RocketMQ源码学习笔记:Producer启动流程

这是本人学习的总结&#xff0c;主要学习资料如下 马士兵教育rocketMq官方文档 目录 1、Overview1.1、创建MQClientInstance1.1.1、检查1.1.1、MQClientInstance的ID 1.2、MQClientInstance.start() 1、Overview 这是发送信息的代码样例&#xff0c; DefaultMQProducer produ…

Gradio 教程四:Building Generative AI Applications with Gradio

文章目录 一、使用interface构建NLP应用1.1 构建文本摘要应用1.1.1 设置API密钥1.1.2 调用文本摘要API1.1.3 运行本地模型获取响应1.1.4 使用interface构建应用 1.2 构建命名实体识别应用1.2.1 调用NER任务API1.2.2 使用interface构建应用1.2.3 加入额外函数&#xff0c;合并to…