2023 58同城笔试 58同城笔试题 0916
笔试时间:2023年9月16日 秋招
第一题
题目
公司正在进行优秀项目组评比的初选工作,评委会已经根据K个项目组提交的材料完成打分,各项目组分数为s1,s2,s3 ......sk。评委组希望设定一个初选晋级分数线x,使得所有得分大于x的项目组晋级,其他淘汰,同时,希望晋级和淘汰的项目组数量都在[m,n]区间。显然x可能不存在,也可能存在多个x。若不存在则输出-1,若存在多个,则输出满足条件的所有分数线的最小值。
参数取值范围:1<k<30000,1<m<=n<k,0<si<=1000,且k、m、n、si为正整数。
样例输入
2,3,[1,2,3,5,6,4]
样例输出
3
参考题解
模拟。
C++:[此代码未进行大量数据的测试,仅供参考]
class Solution { public: int calculate(int m, int n, vector<int>& scores) { int s = scores.size(); // 检查是否有足够的候选项目 if (n + n < s || s < m + m) { return -1; } // 对分数进行排序 sort(scores.begin(), scores.end()); // 计算分数线 if (m + n >= s) { return scores[m - 1]; } else if (n + n >= s) { return scores[s - n - 1]; } return -1; } };
Java:[此代码未进行大量数据的测试,仅供参考]
import java.util.Arrays; public class Solution { public int calculate(int m, int n, int[] scores) { int s = scores.length; if (n + n < s || s < m + m) { return -1; } Arrays.sort(scores); if (m + n >= s) { return scores[m - 1]; } else if (n + n >= s) { return scores[s - n - 1]; } return -1; } }
Python:[此代码未进行大量数据的测试,仅供参考]
class Solution: def calculate(self, m, n, scores): s = len(scores) if n + n < s or s < m + m: return -1 scores.sort() if m + n >= s: return scores[m - 1] elif n + n >= s: return scores[s - n - 1] return -1
第二题
题目
给定一个从0开始的数组nums和一个非负整数k,在一次操作中,你可以做以下操作:选择一个之前未选择过的下标i,范围为[0,nums.length - 1],将nums[i]替换为范围[nums[i] -k,nums[i]+k]内的任意整数 (包含两端)。在应用任意次数的操作后,返回数组nums的最大可能分数。数组分数是“数组中最多的重复元素个数”。注意,你只能对每个下标应用一次操作。
样例输入
[4,6,1,2],2
样例输出
3
说明:
在这个示例中,我们进行了以下操作:
#选择下标1,将其替换为4(范围为[4,8]),nums =[4,4,12]
#选择下标3,将其替换为4(范国为[0,4]),nums=[4,4,1,4].
应用这些操作后,数组nums的得分为3(由下标0、1和3组成的子序列)。可以证明,3是我们可以达到的最大可能长度。
参考题解
C++:[此代码未进行大量数据的测试,仅供参考]
class Solution { public: int maximumScore(vector<int>& nums, int k) { int m = 1e5 + 10; vector<int> cha(3 * m); for (auto &i : nums) { i += m; int left = i - k; int
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2023秋招各大笔试题汇总,c++,java,python多种语言分析,解答。