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多种语言分析,解答。
查看10道真题和解析