大家好,我是苍何。
之前写了一篇武汉的外包公司名单,评论区做了个简单统计,很多人说,在外包的日子很煎熬,不再想去了。
有小伙伴留言说有些外包会强制离职,不行就转岗,让人极度没有安全感。
这点实际情况是,如果是跟着甲方临时性项目,由于甲方项目做完结束,如果没有新项目的情况下,人员就会释放。
外包公司就会安排进新的项目组,如果甲方反馈人员不大行,这个时候外包公司好的会安排再试试其他项目,不行的就直接安排离职。
而且就成长性来说,一些甲方不愿意或者处于信息安全的角度,对外包人员资料开放有限,这也导致,很多时候,不明不白的,就真的成了写代码的工具。
有些更过分,区别对待,在餐厅,正式员工就可以免费吃,外包就得多付钱,一系列不公平对待,也真够难受的。
好了,我觉得呢,如果当下没更好的去处,就先外包待着,默默努力,早日想自研公司进军。
下面给成都的外包公司做了个简单统计,给大家做个分享:
保命申明:这些公司苍何都没实际去过,仅根据群友反馈和网络搜集,如有出入的地方,还请指出,谢谢。
好啦,关于成都的外包公司,你有什么补充的呢?欢迎评论区讨论。
…
回归主题。
今天来一道某成都外包公司开发考过的一道面试算法题,给枯燥的牛马生活加加油😂。
- 《RocketMQ 从入门到精通》 原创电子书免费下载(面试必背)
- 面试官看了就喜欢的简历模板免费下载!
- PmHub-开源项目-助你拿个好 offer。
题目描述
平台:LeetCode
题号:1
题目:两数之和
给定一个整数数组 nums
和一个整数目标值 target
,请你在该数组中找出 和为目标值 target
的那 两个整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案,且你不能使用同一个元素两次。
你可以按任意顺序返回答案。
示例 1:
输入: nums = [2,7,11,15], target = 9
输出: [0,1]
解释: 因为 nums[0] + nums[1] == 9
,返回 [0, 1]
。
示例 2:
输入: nums = [3,2,4], target = 6
输出: [1,2]
示例 3:
输入: nums = [3,3], target = 6
输出: [0,1]
提示:
2 <= nums.length <= 10⁴
-10⁹ <= nums[i] <= 10⁹
-10⁹ <= target <= 10⁹
- 只会存在一个有效答案
进阶:
你可以想出一个时间复杂度小于 O(n²) 的算法吗?
解题思路
为了降低时间复杂度,我们可以使用哈希表来记录已经遍历的数字和它们的索引,从而在一次遍历中完成查找:
- 初始化一个哈希表,用于存储数组元素的值和对应的索引。
- 遍历数组
nums
:- 对于每个元素,计算目标值
target
与当前元素的差值complement
。 - 检查
complement
是否已经存在于哈希表中:- 如果存在,说明找到了两个数,返回它们的索引。
- 如果不存在,将当前元素和索引加入哈希表。
- 对于每个元素,计算目标值
- 如果遍历结束仍未找到,则返回空数组(但根据题目保证有解,这种情况不会发生)。
这种方法的时间复杂度为 O(n),空间复杂度为 O(n)。
代码实现
以下是基于解题思路的代码实现:
Java实现
import java.util.HashMap;
public class TwoSum {
public int[] twoSum(int[] nums, int target) {
// 创建一个哈希表用于存储数字和索引
HashMap<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
int complement = target - nums[i];
// 检查是否存在与当前数字匹配的补数
if (map.containsKey(complement)) {
return new int[] { map.get(complement), i };
}
// 如果不存在,将当前数字和索引存入哈希表
map.put(nums[i], i);
}
// 根据题目保证有解,这里不会执行
return new int[0];
}
}
C++实现
#include <unordered_map>
#include <vector>
using namespace std;
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
// 使用哈希表存储数字和索引
unordered_map<int, int> map;
for (int i = 0; i < nums.size(); i++) {
int complement = target - nums[i];
// 检查哈希表中是否存在补数
if (map.find(complement) != map.end()) {
return {map[complement], i};
}
// 将当前数字和索引存入哈希表
map[nums[i]] = i;
}
// 根据题目保证有解,这里不会执行
return {};
}
};
Python实现
def two_sum(nums, target):
# 创建一个哈希表用于存储数字和索引
num_map = {}
for i, num in enumerate(nums):
complement = target - num
# 检查哈希表中是否存在补数
if complement in num_map:
return [num_map[complement], i]
# 将当前数字和索引存入哈希表
num_map[num] = i
# 根据题目保证有解,这里不会执行
return []
# 测试用例
nums = [2, 7, 11, 15]
target = 9
print(two_sum(nums, target)) # 输出: [0, 1]
复杂度分析
-
时间复杂度:O(n)
遍历一次数组,每次操作(查找和插入哈希表)耗时均为 O(1)。 -
空间复杂度:O(n)
哈希表在最坏情况下需要存储数组中的所有元素。
ending
你好呀,我是苍何。是一个每天都在给自家仙人掌讲哲学的执着青年,我活在世上,无非想要明白些道理,遇见些有趣的事。倘能如我所愿,我的一生就算成功。共勉 💪
点击关注下方账号,你将感受到一个朋克的灵魂,且每篇文章都有惊喜。
更多更全更热门的「笔试/面试」相关资料可访问排版精美的 合集新基地 🎉🎉