20道单选,10道多选,3道编程题,时间还是很紧的编程题1: 最多进行三次替换操作后,数组中最长的相等子段的长度双指针,加一个最外层循环,来控制把数组变成什么样的目标值for(int target = min_val; target int left = 0, cnt = 0; for(int right = 0; 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 到冗余项目和唯一外部项目数量的最小值),计算每种替换方案下的新总利润和不同类别数,并计算相应的优雅度,记录其中的最大值