迅雷笔试
20道单选,10道多选,3道编程题,时间还是很紧的
编程题1: 最多进行三次替换操作后,数组中最长的相等子段的长度
双指针,加一个最外层循环,来控制把数组变成什么样的目标值
for(int target = min_val; target <= max_val; ++target){
int left = 0, cnt = 0;
for(int right = 0; right < arr.size(); ++right){
if(arr[right] != target){
cnt++;
}
// 如果不等于目标值的元素超过3个,移动左指针
while(cnt > 3){
if(arr[left] != target){
cnt--;
}
left++;
}
// 更新最大长度
max_len = max(max_len, right - left +1);
}
}
编程题2:只能过60%,就是建了一个map做映射,很简单的想法,遇到冲突就说明不能转化,输出false
但是这样只能过60%,讨论之后,发现没读清楚题目,他那个是整体将相同的字母变化,这样就会存在循环的问题
当 str2 中所有 26 个小写字母都已被映射时,如果需要将多个 str1 字符映射到同一个 str2 字符,将无法使用临时字符来解决映射冲突。
不是很好举,类似于这种情况
•映射关系:a -> a, b -> b, c -> a
•当 c -> a 时,a 已经映射到 a,需要一个临时字符来避免冲突
因此可能要判断映射之后所有的字符有没有超过26个
编程题3:ac了
首先将所有项目按利润降序排序,以便初步选择利润最高的前 k 个项目,并计算初始的总利润和不同类别的数量。接着,识别初始选择中属于重复类别的“冗余项目”,这些项目是潜在的替换候选,以增加不同类别的数量。同时,收集初始选择之外属于未出现类别的“唯一外部项目”,这些项目可用于替换冗余项目,从而可能提升不同类别的数量。然后,通过遍历可能的替换次数 t(从 0 到冗余项目和唯一外部项目数量的最小值),计算每种替换方案下的新总利润和不同类别数,并计算相应的优雅度,记录其中的最大值
编程题1: 最多进行三次替换操作后,数组中最长的相等子段的长度
双指针,加一个最外层循环,来控制把数组变成什么样的目标值
for(int target = min_val; target <= max_val; ++target){
int left = 0, cnt = 0;
for(int right = 0; right < arr.size(); ++right){
if(arr[right] != target){
cnt++;
}
// 如果不等于目标值的元素超过3个,移动左指针
while(cnt > 3){
if(arr[left] != target){
cnt--;
}
left++;
}
// 更新最大长度
max_len = max(max_len, right - left +1);
}
}
编程题2:只能过60%,就是建了一个map做映射,很简单的想法,遇到冲突就说明不能转化,输出false
但是这样只能过60%,讨论之后,发现没读清楚题目,他那个是整体将相同的字母变化,这样就会存在循环的问题
当 str2 中所有 26 个小写字母都已被映射时,如果需要将多个 str1 字符映射到同一个 str2 字符,将无法使用临时字符来解决映射冲突。
不是很好举,类似于这种情况
•映射关系:a -> a, b -> b, c -> a
•当 c -> a 时,a 已经映射到 a,需要一个临时字符来避免冲突
因此可能要判断映射之后所有的字符有没有超过26个
编程题3:ac了
首先将所有项目按利润降序排序,以便初步选择利润最高的前 k 个项目,并计算初始的总利润和不同类别的数量。接着,识别初始选择中属于重复类别的“冗余项目”,这些项目是潜在的替换候选,以增加不同类别的数量。同时,收集初始选择之外属于未出现类别的“唯一外部项目”,这些项目可用于替换冗余项目,从而可能提升不同类别的数量。然后,通过遍历可能的替换次数 t(从 0 到冗余项目和唯一外部项目数量的最小值),计算每种替换方案下的新总利润和不同类别数,并计算相应的优雅度,记录其中的最大值
全部评论
第二题用两个umap是能过的,s1->s2 存一下,反过来s2->s1再存一下
过了吗
相关推荐