科大讯飞后端笔试(26秋招)
时间:2025-8-02
一、通用选择题
二、后端选择题
三、Java选择题
四、编程题
(1)给一个字符串s和t,t字符串的长度必为偶数,将t字符串的后一半截断拼接在s的后面即可。
思路:送分题,注意读取输入时s、t字符串会存在空格。
(2)给一个字符串数组(每个字符串由小写字母组成),将其任意组合拼接后,可以任意删除一个字符,求最小字典序的的组合。
思路:求所有的全排列组合,然后将每一种组合的第一个降序字符删除,从所有组合筛选出最小字典的即可。
(3)在一个平面坐标图上存在n个点,求一个圆心在坐标轴,且圆的范围能够覆盖n/2(向下取整)个点的最小半径r。
思路:没做出来,下面是AI给的思路。
- 二分搜索半径:确定半径的上下界:下界为0,上界为所有点坐标绝对值的最大值(即max(|x_i|, |y_i|),因为当半径足够大时,一定能覆盖所有点。通过二分搜索寻找最小半径:对于每个中间半径mid,检查是否存在圆心在x轴或y轴上、半径为mid的圆覆盖至少一半的点。
- 检查候选半径:圆心在x轴上:圆心为(c, 0)。对于每个点(x, y),若|y| <= r,则计算圆心横坐标c的范围区间[x - d, x + d],其中d = sqrt(r^2 - y^2)。将这些区间转化为事件点(区间起点加1,终点减1),排序后扫描事件点,统计覆盖次数,若存在某个c的覆盖次数达到要求,则半径可行。圆心在y轴上:类似处理,圆心为(0, c),对每个点(x, y),若|x| <= r,计算c的范围区间[y - d, y + d],同样扫描事件点判断。
- 事件点处理:事件点包括区间起点(+1)和终点(-1),按坐标排序,坐标相同时起点事件优先。扫描事件点,维护当前覆盖次数,若覆盖次数达到一半点数,则当前半径可行。
- 精度控制:二分搜索的终止条件为半径区间长度小于1e-7,确保足够的精度。