比亚迪
每年的 789 三个月,是最能在互联网沉浸式体验大厂入职的时间段,因为会有大量的学生作为新员工入职。
今天看到一篇关于比亚迪的入职体验贴,从帖子时间和内容来看,贴主绝对不算入职晚的一批,但也未能获得好的体验,甚至直呼“开眼了”。
![alt](https://img-blog.csdnimg.cn/img_convert/14085497f2d810b9639cf1cb2abbb57e.png)
这位同学找了六个月的工作,最终接了比亚迪的 offer,待遇情况:试用期 7.5k,没有绩效(没有绩效就意味着要扣钱的时候扣的是基础工资)。
而且这同学入职比亚迪的路线也很神奇:一开始应聘的是校招的前端工程师,后来被告知校招满人,让其走社招路线,社招面了一遍就过了,最开始以软件开发工程师入职,现在却在硬件测试部门工作。
经过这几轮的岗位变更,该同学一个最大的感受:早来有好岗位,晚来的就是块砖。
另外,这位同学还发现,比亚迪新开一个部门都是在别的部门送人过去,大家过去都是重头学,而且没有培训,例如现在的硬件开发部门,很多都是像楼主一样,是软件方面出身,对硬件并不熟悉,没有经验那就只能砸时间,但加班又只有调休。
至于 offer 上的其他福利和制度,例如年终奖、年假、调薪等等,有是有,但亮点不多。光是「把软件专业安排到硬件岗位,还不能转岗」这一规定,就已经断了久留的念想了。
这年头,还能牢牢掌握决定权的应聘者真的不多,报读大学的时候,不少同学是走"专业服从分配"路线,现在毕业了,想进大厂工作,还要"岗位服从分配"。
都说大厂会把工作细分到极致,现实却很骨感,对此,你怎么看?
...
回归主题。
周五,来一道简简单单算法题迎接周末。
题目描述
平台:LeetCode
题号:1403
给你一个数组 nums
,请你从中抽取一个子序列,满足该子序列的元素之和严格大于未包含在该子序列中的各元素之和。
如果存在多个解决方案,只需返回长度最小的子序列。如果仍然有多个解决方案,则返回元素之和最大的子序列。
与子数组不同的地方在于,「数组的子序列」不强调元素在原数组中的连续性,也就是说,它可以通过从数组中分离一些(也可能不分离)元素得到。
注意,题目数据保证满足所有约束条件的解决方案是唯一的。同时,返回的答案应当按非递增顺序排列。
示例 1:
输入:nums = [4,3,10,9,8]
输出:[10,9]
解释:子序列 [10,9] 和 [10,8] 是最小的、满足元素之和大于其他各元素之和的子序列。但是 [10,9] 的元素之和最大。
示例 2:
输入:nums = [4,4,7,6,7]
输出:[7,7,6]
解释:子序列 [7,7] 的和为 14 ,不严格大于剩下的其他元素之和(14 = 4 + 4 + 6)。因此,[7,6,7] 是满足题意的最小子序列。注意,元素按非递增顺序返回。
示例 3:
输入:nums = [6]
输出:[6]
提示:
贪心
根据题意,我们可以先对 nums
进行排序(升序),然后从后往前开始选择,当首次满足「选择元素之和 严格大于 未选择元素之和」时,必然满足所选元素个数最少,若存在其他同样个数的合法方案,也满足所选方案为元素和最大方案,同时满足答案输出按照非升序要求。
Java 代码:
class Solution {
public List<Integer> minSubsequence(int[] nums) {
Arrays.sort(nums);
int sum = 0, cur = 0, idx = nums.length - 1;
for (int i : nums) sum += i;
List<Integer> ans = new ArrayList<>();
while (cur <= sum) {
sum -= nums[idx];
cur += nums[idx];
ans.add(nums[idx--]);
}
return ans;
}
}
C++ 代码:
class Solution {
public:
vector<int> minSubsequence(vector<int>& nums) {
sort(nums.begin(), nums.end());
int sumv = 0, cur = 0, idx = nums.size() - 1;
for (int x : nums) sumv += x;
vector<int> ans;
while (cur <= sumv) {
sumv -= nums[idx];
cur += nums[idx];
ans.push_back(nums[idx--]);
}
return ans;
}
};
Python 代码:
class Solution:
def minSubsequence(self, nums: List[int]) -> List[int]:
nums.sort()
sumv, cur, idx = sum(nums), 0, len(nums) - 1
ans = []
while cur <= sumv:
sumv -= nums[idx]
cur += nums[idx]
ans.append(nums[idx])
idx -= 1
return ans
TypeScript 代码:
function minSubsequence(nums: number[]): number[] {
nums = nums.sort((a,b)=>a-b)
let sum = 0, cur = 0, idx = nums.length - 1
for (const i of nums) sum += i
const ans = new Array<number>()
while (cur <= sum) {
sum -= nums[idx]
cur += nums[idx]
ans.push(nums[idx--])
}
return ans
};
-
时间复杂度: -
空间复杂度:
最后
巨划算的 LeetCode 会员优惠通道目前仍可用 ~
使用福利优惠通道 leetcode.cn/premium/?promoChannel=acoier,年度会员 有效期额外增加两个月,季度会员 有效期额外增加两周,更有超大额专属 🧧 和实物 🎁 福利每月发放。
我是宫水三叶,每天都会分享算法知识,并和大家聊聊近期的所见所闻。
欢迎关注,明天见。
更多更全更热门的「笔试/面试」相关资料可访问排版精美的 合集新基地 🎉🎉