小米汽车值得去吗?最终拒了 offer。

车企选择

今天逛某职场 App 时,无意间看到一篇寻求 offer 抉择意见的帖子:

alt

这位同学刚从加班闻名(但 CEO 强调既学华为狼性,也学华为分配)的理想汽车离职。

经过了 6 轮面试,收到了小米 offer,但目前纠结是否要去。

不好的地方,入职前面试官就明说了,基本上每天都 10 点后下班,而且候选人也担心小米汽车不靠谱。

好的地方,待遇给的是真心不错。

连从理想汽车跳槽出来的网友都觉得不错,那说明小米汽车的待遇确实是有竞争力的。

但评论区有不少小米员工则现身说法,表达的都是「劝退」意见:

alt
alt

有同学强调,实际情况下班都是晚上 10:30 起步,而且入职时宣称的弹性工作时间,只弹了下班时间 🤣

alt
alt

还有同学指出,小米内卷严重,期权不合理,而且小米汽车只是试水产品,会有失败风险。

最终,这位同学"听劝"了,决定放弃小米 offer,入职大众中国。

alt

但这些都是网友在去年 10 月给出的意见了,现在小米汽车上市交付已经有段时间,基本上是空前成功,热度不减,一车难求。

按照常规理解,小米汽车的年终奖应该不会低,也不知道那位楼主有没有拍断大腿。

...

回归主线。

来一道和「新能源车企」相关的算法原题。

题目描述

平台:LeetCode

题号:1775

给你两个长度可能不等的整数数组 nums1 和 nums2 。两个数组中的所有值都在 1 到 6 之间(包含 1 和 6)。

每次操作中,你可以选择 任意 数组中的任意一个整数,将它变成 1 到 6 之间 任意 的值(包含 1 和 6)。

请你返回使 nums1 中所有数的和与 nums2 中所有数的和相等的最少操作次数。如果无法使两个数组的和相等,请返回 -1 。

示例 1:

输入:nums1 = [1,2,3,4,5,6], nums2 = [1,1,2,2,2,2]

输出:3

解释:你可以通过 3 次操作使 nums1 中所有数的和与 nums2 中所有数的和相等。以下数组下标都从 0 开始。
- 将 nums2[0] 变为 6 。 nums1 = [1,2,3,4,5,6], nums2 = [6,1,2,2,2,2] 。
- 将 nums1[5] 变为 1 。 nums1 = [1,2,3,4,5,1], nums2 = [6,1,2,2,2,2] 。
- 将 nums1[2] 变为 2 。 nums1 = [1,2,2,4,5,1], nums2 = [6,1,2,2,2,2] 。

示例 2:

输入:nums1 = [1,1,1,1,1,1,1], nums2 = [6]

输出:-1

解释:没有办法减少 nums1 的和或者增加 nums2 的和使二者相等。

示例 3:

输入:nums1 = [6,6], nums2 = [1]

输出:3

解释:你可以通过 3 次操作使 nums1 中所有数的和与 nums2 中所有数的和相等。以下数组下标都从 0 开始。
- 将 nums1[0] 变为 2 。 nums1 = [2,6], nums2 = [1] 。
- 将 nums1[1] 变为 2 。 nums1 = [2,2], nums2 = [1] 。
- 将 nums2[0] 变为 4 。 nums1 = [2,2], nums2 = [4] 。

提示:

枚举 + 贪心 + 数学

nums1 的长度为 nnums2 的长度为 m,根据题意两数组的值域分别为 ,可分别视为数轴上的两条线段。

为了方便,我们人为固定 ,若不满足则交换两数组,返回 minOperations(nums2, nums1) 即可。

先来考虑无解的情况:当 时,说明两线段不重合,必然无法通过变换使得总和相等,直接返回 -1

由于 的范围为 ,且 的值域大小 ,因此我们可以通过枚举最终目标和 x(两线段的重合部分)来做,枚举范围不超过

于是问题转换为:对于一个原总和为 sum 的数组 nums 而言,按照题目的变换规则,至少经过多少次变换,才能将其总和变为 x

根据原总和 sum 和目标结果 x 的大小关系进行分情况讨论(将两者差值绝对值记为 d):

  • 时,对于原数为 的数而言,其能变为不超过 的任意数。

    例如 能够变化为 中的任意数,即单个数值 最多能够抵消 个差值,不失一般性的可概括为原数为 所能抵消的差值为

    因此,我们贪心的使用较大数进行变换(从 枚举 i),对于每个数值 i 而言,其所能提供的个数为

  • 时,同理,原数为 所能提供的最大抵消数为 ,因此我们贪心使用较小数进行变换(从 枚举 i),对于每个数值 i 而言,其所能提供的个数为

如此一来,我们通过枚举两线段重合点 x,复杂度为 ,并通过复杂度为 的数学方法来得知将两原数组总和变为 x 所需要的操作次数 cnt,在所有的 cnt 取最小值即是答案。整体计算量为 ,可以过。

Java 代码:

class Solution {
    int[] c1 = new int[10], c2 = new int[10];
    int s1, s2;
    public int minOperations(int[] nums1, int[] nums2) {
        int n = nums1.length, m = nums2.length;
        if (n > m) return minOperations(nums2, nums1);
        if (m > 6 * n) return -1;
        for (int x : nums1) {
            c1[x]++; s1 += x;
        }
        for (int x : nums2) {
            c2[x]++; s2 += x;
        }
        int ans = n + m;
        for (int i = m; i <= 6 * n; i++) ans = Math.min(ans, getCnt(c1, s1, i) + getCnt(c2, s2, i));
        return ans;
    }
    int getCnt(int[] cnts, int sum, int x) {
        int ans = 0;
        if (sum > x) {
            for (int i = 6, d = sum - x; i >= 2 && d > 0; i--) {
                int c = Math.min((int) Math.ceil(d * 1.0 / (i - 1)), cnts[i]);
                ans += c; d -= c * (i - 1);
            }
        } else if (sum < x) {
            for (int i = 1, d = x - sum; i <= 5 && d > 0; i++) {
                int c = Math.min((int) Math.ceil(d * 1.0 / (6 - i)), cnts[i]);
                ans += c; d -= c * (6 - i);
            }
        }
        return ans;
    }
}

C++ 代码:

class Solution {
public:
    int c1[10], c2[10];
    int s1, s2;
    int minOperations(vector<int>& nums1, vector<int>& nums2) {
        int n = nums1.size(), m = nums2.size();
        if (n > m) return minOperations(nums2, nums1);
        if (m > 6 * n) return -1;
        for (int x : nums1) {
            c1[x]++; s1 += x;
        }
        for (int x : nums2) {
            c2[x]++; s2 += x;
        }
        int ans = n + m;
        for (int i = m; i <= 6 * n; i++) {
            ans = min(ans, getCnt(c1, s1, i) + getCnt(c2, s2, i));
        }
        return ans;
    }
    int getCnt(int cnts[], int sum, int x) {
        int ans = 0;
        if (sum > x) {
            for (int i = 6, d = sum - x; i >= 2 && d > 0; i--) {
                int c = min((intceil(d * 1.0 / (i - 1)), cnts[i]);
                ans += c; d -= c * (i - 1);
            }
        } else if (sum < x) {
            for (int i = 1, d = x - sum; i <= 5 && d > 0; i++) {
                int c = min((intceil(d * 1.0 / (6 - i)), cnts[i]);
                ans += c; d -= c * (6 - i);
            }
        }
        return ans;
    }
};

Python 代码:

class Solution:
    def minOperations(self, nums1: List[int], nums2: List[int]) -> int:
        n, m = len(nums1), len(nums2)
        if n > m:
            return self.minOperations(nums2, nums1)
        if m > 6 * n:
            return -1
        c1, c2 = Counter(nums1), Counter(nums2)
        s1, s2 = sum(nums1), sum(nums2)
        def getCnt(cnts, tot, x):
            ans = 0
            if tot > x:
                d = tot - x
                for i in range(61-1):
                    if d <= 0:
                        break
                    c = min(math.ceil(d / (i - 1)), cnts[i])
                    ans, d = ans + c, d - c * (i - 1)
            elif tot < x:
                d = x - tot
                for i in range(16):
                    if d <= 0:
                        break
                    c = min(math.ceil(d / (6 - i)), cnts[i])
                    ans, d = ans + c, d - c * (6 - i)
            return ans
        ans = n + m
        for i in range(m, 6 * n + 1):
            ans = min(ans, getCnt(c1, s1, i) + getCnt(c2, s2, i))
        return ans
  • 时间复杂度: ,其中 的值域大小
  • 空间复杂度:

最后

给大伙通知一下 📢 :

全网最低价 LeetCode 会员目前仍可用!!!

📅 年度会员:有效期加赠两个月!!; 季度会员:有效期加赠两周!!

🧧 年度会员:获 66.66 现金红包!!; 季度会员:获 22.22 现金红包!!

🎁 年度会员:参与当月丰厚专属实物抽奖(中奖率 > 30%)!!

专属链接:leetcode.cn/premium/?promoChannel=acoier

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

欢迎关注,明天见。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【VTKExamples::Meshes】第十期 Decimation

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享VTK样例Decimation,并解析接口vtkDecimatePro,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO…

[计算机效率] 时间记录工具:ManicTime

3.24 时间记录工具&#xff1a;ManicTime ManicTime是一款数据收集软件&#xff0c;主要用于记录电脑上各种软件使用所花费的时间以及电脑闲置的时间。用户还可以定制记录某一时间段内的系统活动。 数据收集&#xff1a;ManicTime能够静默运行于后台&#xff0c;自动跟踪并收…

如何检测和避免线程死锁?

在日常开发中涉及到多线程开发时候就很容易会产生死锁 what: 什么是线程死锁? 线程死锁是指两个或两个以上的线程在执行过程中&#xff0c;由于竞争资源或者由于彼此通信而造成的一种阻塞现象。当这些线程互相持有对方所需要的资源时&#xff0c;会互相等待对方释放资源&am…

ssm054班主任助理系统的设计与实现+jsp

班主任助理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本班主任助理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间…

mybatis的一对多

业务&#xff1a;通常主表从表 查询&#xff0c;一对多关系&#xff0c;通常是先查主表&#xff0c;然后拿主表的 关联字段与从表关联。在代码中 通常用for 循环等方法给 从表的数据赋值&#xff0c;很麻烦&#xff0c;&#xff0c;&#xff0c;很麻烦。。。。 用mybatis的…

mac基础操作、快捷、软件快捷方式

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 mac基础操作、快捷、软件快捷方式 前言mac快捷操作快捷查找切换页面页面缩略访达和命令端切换创建文件夹创建文件删除文件/文件夹获取文件的路径移动文件或文件夹复制文件命令端常用命令 前言 主要是方…

Win11 使用 WSL2 安装 linux 子系统 ubuntu

Win11 使用 WSL2 安装 linux 子系统 ubuntu 段子手168 1、用 部署映像服务和管理工具 dism.exe 命令&#xff0c;开启 WSL2 按【WIN R】&#xff0c;打开【运行】&#xff0c;输入&#xff1a;【cmd】&#xff0c;管理员打开【命令行提示符】。 启用适用于 Linux 的 Windo…

小程序视频怎么保存到本地

掌握视频下载高手的妙招&#xff0c;轻松将微信小程序中的视频内容保存到本地&#x1f4e5;。遵循本文步骤&#xff0c;无需繁琐操作&#xff0c;快速实现视频下载&#xff0c;享受随时观看的便捷。 下载高手我已经打包好了 下载高手链接&#xff1a;https://pan.baidu.com/s…

#381. 四边形继承练习

太爽了 甚至还现学了叉积判断线段是否相交和求面积的方法 先给出我的代码&#xff1a; #include <iostream> #include <vector> #include <iomanip> #include <cmath>using namespace std;//下面需要补充多个类的声明及实现代码 const double EPS 1…

儿童护眼台灯怎么选?五款必选的高口碑护眼台灯推荐

儿童台灯&#xff0c;想必大家都不会陌生了&#xff0c;是一种学生频繁使用的小灯具&#xff0c;一般指放在桌面用的有底座的电灯。随着近年来儿童青少年的视力急速下滑&#xff0c;很多家长都会选择给孩子选择一款合适的护眼台灯&#xff0c;以便孩子夜晚学习能有个好的照明环…

数据结构—顺序表实现通讯录

在上一节我们基本了解了顺序表的基本知识&#xff0c;接下来我们就用顺序表来实现一下通讯录。 一、基于动态顺序表实现通讯录 1.1 功能介绍 1. 能够保存用户信息&#xff1a;姓名&#xff0c;性别&#xff0c;年龄&#xff0c;电话&#xff0c;地址等 2. 添加联系人信息 3. …

零基础使用FlexLua打造LoRa无线气体流量计,硬件轻松快速开发。

在工业领域&#xff0c;对气体流量进行准确监测和管理是保障生产安全和提高效率的重要环节。而LoRa&#xff08;长距离低功耗无线技术&#xff09;作为一种适用于远距离、低功耗的通信技术&#xff0c;为无线传感器网络的建设提供了可靠的解决方案。结合气体流量传感技术&#…

【JS】querySelectorAll和getElementsByClassName

现有一段代码&#xff0c;li的类名均为item&#xff0c;有一按钮可动态添加类名为item的li。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge…

vue表格操作列,按钮太多显示... 点击后悬浮显示全部按钮

效果: 分析原理: 一共就三步,仔细看看很简单,位置要加对,代码结构下边有demo 代码结构demo: <el-table-columnlabel"操作"align"center"fixed"right"show-overflow-tooltip><template slot-scope"scope"><el-buttonsi…

润乾报表平台 InputServlet 任意文件读取漏洞复现

0x01 产品简介 润乾报表是一个纯JAVA的企业级报表工具&#xff0c;支持对J2EE系统的嵌入式部署&#xff0c;无缝集成。服务器端支持各种常见的操作系统&#xff0c;支持各种常见的关系数据库和各类J2 EE的应用服务器&#xff0c;客户端采用标准纯html方式展现&#xff0c;支持…

1000BASE-SX VS 1000BASE-LX SFP光模块

SFP光模块是一种小型可插拔光模块&#xff0c;用于支持1G速率的光纤通信&#xff0c;有多种不同类型。市场上使用较广泛是1000BASE-SX和1000BASE-LX SFP光模块。在本文中&#xff0c;飞速&#xff08;FS&#xff09;将对这两种LC SFP光模块进行简要介绍。 什么是1000BASE-SX S…

3dmax制作小熊猫的基本流程

1.透视图插入面片&#xff0c;改高度宽度&#xff0c;把参考图放进面片里。 2.角度捕捉切换&#xff0c;角度改为90 3.shift旋转&#xff0c;旋转面片&#xff0c;复制一个出来 4.在前视图&#xff0c;把参考图片中的正式图小熊猫的一半的位置&#xff08;可以是眼睛&#x…

Android Studio引入framework.jar包

一. 前言 Android Studio 引入framework.jar 步骤&#xff0c;记录笔记 Android源码编译产生的framework.jar 在不同的版本上生成路径是不同的 Android N/O: 7 和 8 out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar Android P/Q: 9 和 10 out/s…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之十二 简单图片添加水印效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之十二 简单图片添加水印效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之十二 简单图片添加水印效果 一、简单介绍 二、简单图片添加水印效果实现原理 三、简单图片添加水印效果案例…

c++ - 类的默认成员函数

文章目录 前言一、构造函数二、析构函数三、拷贝构造函数四、重载赋值操作符五、取地址及const取地址操作符重载 前言 默认成员函数是编译器自动生成的&#xff0c;也可以自己重写&#xff0c;自己重写之后编译器就不再生成&#xff0c;下面是深入了解这些成员函数。 一、构造…