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 秋招笔试题汇总解析 文章被收录于专栏

2023秋招各大笔试题汇总,c++,java,python多种语言分析,解答。

全部评论

相关推荐

10-11 17:45
门头沟学院 Java
走吗:别怕 我以前也是这么认为 虽然一面就挂 但是颇有收获!
点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务