得物笔试 得物秋招 得物笔试题 0920

笔试时间:2025年9月20日

往年笔试合集:

2023春招秋招笔试合集

2024春招秋招笔试合集

第一题:洗盘子

题目描述:小A在餐馆打工,他的主要工作就是洗盘子。某一天餐厅有 n 个盘子需要清洗,从上到下编号 1-n,小A只会每次拿最上面连续的若干个编号连续的盘子 i-j,然后按照 i-j 的顺序来洗它们。

现在,给出一个人洗这个盘子的顺序,请你判断一下是否可能是小A洗盘子的顺序。

输入描述

第一行一个整数 t 表示数据组数。

对于每组数据:

  • 第一行一个整数 n
  • 第二行 n 个整数 a₁-aₙ,数字间两两有空格隔开,表示某个人洗盘子的顺序

数据范围:1≤t≤10, 1≤n≤1000

输出描述

输出 t 行,每行一个单词,如果可能是小A洗的,则输出 yes,否则输出 no。

样例输入

2

5

1 2 5 4 3

5

1 2 5 3 4

样例输出

yes

no

样例说明: 第一组样例:先拿出盘子1,再拿出盘子2,再拿出盘子3~5。 第二组样例:不可能是小A洗的。

参考题解

解题思路:

  1. 将输入序列分割成多个连续递减的子序列(段)。分割规则是当当前元素大于前一个元素时,结束当前段并开始新段。
  2. 检查每个段内的数字是否构成连续的数值序列。对于长度大于1的段,要求相邻元素必须严格递减且差值为1。
  3. 确保段与段之间满足递增关系,即后一段的最小值必须大于前一段的最大值。

C++:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

bool is_valid_sequence(vector<int>& arr) {
    int n = arr.size();
    if (n == 0) return true;
    
    vector<vector<int>> segments;
    vector<int> current_segment;
    current_segment.push_back(arr[0]);
    
    for (int i = 1; i < n; i++) {
        if (arr[i] < arr[i-1]) {
            current_segment.push_back(arr[i]);
        } else {
            segments.push_back(current_segment);
            current_segment.clear();
            current_segment.push_back(arr[i]);
        }
    }
    segments.push_back(current_segment);
    
    // Check each segment
    for (auto& segment : segments) {
        if (segment.size() > 1) {
            for (int j = 1; j < segment.size(); j++) {
                if (segment[j-1] - segment[j] != 1) {
                    return false;
                }
            }
        }
    }
    
    // Check segments order
    for (int i = 1; i < segments.size(); i++) {
        int prev_max = *max_element(segments[i-1].begin(), segments[i-1].end());
        int curr_min = *min_element(segments[i].begin(), segments[i].end());
        if (curr_min <= prev_max) {
            return false;
        }
    }
    
    return true;
}

int main() {
    int t;
    cin >> t;
    while (t--) {
        int n;
        cin >> n;
        vector<int> arr(n);
        for (int i = 0; i < n; i++) {
            cin >> arr[i];
        }
        if (is_valid_sequence(arr)) {
            cout << "yes" << endl;
        } else {
            cout << "no" << endl;
        }
    }
    return 0;
}

Java:

import java.util.*;

public class Main {
    public static boolean isValidSequence(int[] arr) {
        int n = arr.length;
        if (n == 0) return true;
        
        List<List<Integer>> segments = new ArrayList<>();
        List<Integer> currentSegment = new ArrayList<>();
        currentSegment.add(arr[0]);
        
        for (int i = 1; i < n; i++) {
            if (arr[i] < arr[i-1]) {
                currentSegment.add(arr[i]);
            } else {
                segments.add(new ArrayList<>(currentSegment));
                currentSegment.clear();
                currentSegment.add(arr[i]);
            }
        }
        segments.add(currentSegment);
        
        // Check each segment
        for (List<Integer> segment : segments) {
            if (segment.size() > 1) {
                for (int j = 1; j < segment.size(); j++) {
                    if (segment.get(j-1) - segment.get(j) != 1) {
                        return false;
                    }
                }
            }
        }
        
        // Check segments order
        for (int i = 1; i < segments.size(); i++) {
            int prevMax = Collections.max(segments.get(i-1));
            int currMin = Collections.min(segments.get(i));
            if (currMin <= prevMax) {
                return false;
            }
        }
        
        return true;
    }
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();
        while (t-- > 0) {
            int n = sc.nextInt();
            int[] arr = new int[n];
            for (int i = 0; i < n; i++) {
                arr[i] = sc.nextInt();
            }
            if (isValidSequence(arr)) {
                System.out.println("yes");
            } else {
                System.out.println("no");
            }
        }
        sc.close();
    }
}

Python:

def is_valid_sequence(arr):
    n = len(arr)
    if n == 0:
        return True
    
    segments = []
    current_segment = [arr[0]]
    
    for i in range(1, n):
        if arr[i] < arr[i - 1]:
            current_segment.append(arr[i])
        else:
            segments.append(current_segment)
            current_segment = [arr[i]]
    segments.append(current_segment)
    
    for segment in segments:
        if len(segment) > 1:
            for j in range(1, len(segment)):
                if segment[j - 1] - segment[j] != 1:
                    return False
    
    for i in range(1, len(segments)):
        prev_max = max(segments[i - 1])
        curr_min = min(segments[i])
        if curr_min <= prev_max:
            return False
    
    return True

t = int(input().strip())
for _ in range(t):
    n = int(input().strip())
    arr = list(map(int, input().split()))
    
    if is_valid_sequence(arr):
        print("yes")
    else:
        print("no")

第二题:从子序列到子串

题目描述:小钟有一个长度为 n 的字符串 s。小钟可以对 s 执行如下操作:删除 s 的一个字符,并拼接剩下的字符串。例如,字符串 "abcd",小钟可以删除第三个字符,从而得到新的字符串 "abd"。

某一天,小钟得到了另一个长度为 m 的字符串 t。现在,小钟想知道最少删除 s 多少个字符,才能使得 t 作为 s 的某个连续子串出

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

2025 春招笔试合集 文章被收录于专栏

2025打怪升级记录,大厂笔试合集 C++, Java, Python等多种语言做法集合指南

全部评论

相关推荐

09-26 16:01
门头沟学院 Java
不想祈祷了:希望能给面试官带来半天的好心情
点赞 评论 收藏
分享
选择题&nbsp;语言考的都是&nbsp;Golang,代码片段题就不写了Map&nbsp;并发安全问题LLM&nbsp;文本分词用&nbsp;comparable&nbsp;做&nbsp;&amp;gt;&nbsp;操作,问运行结果接口&nbsp;nil&nbsp;值是否安全贪心和&nbsp;DP&nbsp;的共同点6&nbsp;个并发进程,每个所需资源数为&nbsp;4,资源数至少多少才不会发生死锁数组二分查找某个元素,要比较多少次判断类型转换是否合法,string&nbsp;转&nbsp;float&nbsp;非法、bool&nbsp;转&nbsp;int&nbsp;非法修改表中&nbsp;name&nbsp;字段及其注释,正确的&nbsp;SQL&nbsp;语句copy&nbsp;操作数据库事务进程用完时间片进入什么状态DevOps&nbsp;工具,只知道&nbsp;K8s编程题只能用&nbsp;Golang&nbsp;来做T1模拟小A在餐馆打工,他的主要工作就是洗盘子。某一天餐厅有&nbsp;个盘子需要清洗,从上到下编号&nbsp;1-n,小A只会每次拿最上面连续的若干个编号连续的盘子&nbsp;l-r,然后按照&nbsp;r-l&nbsp;的顺序来洗它们。现在,给出一个人洗这个盘子的顺序,请你判断一下是否可能是小A洗盘子的顺序。输入描述第一行一个整数&nbsp;表示数据组数。对于每组数据:第一行一个整数&nbsp;n第二行&nbsp;n&nbsp;个整数&nbsp;ai-an,数字间两两有空格隔开,表示某个人洗盘子的顺序数据范围:1&nbsp;&amp;lt;=&nbsp;n&nbsp;&amp;lt;=&nbsp;1000,1&nbsp;&amp;lt;=&nbsp;T&nbsp;&amp;lt;=&nbsp;50输出描述输出&nbsp;行,每行一个单词,如果可能是小&nbsp;A&nbsp;洗的,则输出&nbsp;yes,否则输出&nbsp;no。样例输入251&nbsp;2&nbsp;5&nbsp;4&nbsp;351&nbsp;2&nbsp;5&nbsp;3&nbsp;4样例输出yesno提示第一组样例:先拿出盘子&nbsp;1,再拿出盘子2&nbsp;,再拿出盘子&nbsp;3~5。&nbsp;第二组样例:不可能是小&nbsp;A&nbsp;洗的。T2不太会贪心做了一遍,91%DP&nbsp;做了一遍,91%想不明白直接交了小钟有一个长度为&nbsp;n&nbsp;的字符串&nbsp;s。小钟可以对&nbsp;执行如下操作:删除&nbsp;的一个字符,并拼接剩下的字符串。例如,字符串&nbsp;s&nbsp;=&nbsp;abcda,小钟可以删除第三个字符,从而得到新的字符串&nbsp;abda。某一天,小钟得到了另一个长度为&nbsp;m&nbsp;的字符串&nbsp;t。现在,小钟想知道最少删除s&nbsp;多少个字符,才能使得&nbsp;t&nbsp;作为&nbsp;s&nbsp;的某个连续子串出现。如果无论如何也不能使得&nbsp;t&nbsp;在&nbsp;s&nbsp;中出现,则输&nbsp;-1出。输入描述输入包括多组测试数据。输入第一行包括一个正整数&nbsp;T(1&nbsp;&amp;lt;=&nbsp;T&nbsp;&amp;lt;=&nbsp;10),表示测试数据的组数。每组测试数据的第一行有两个整数&nbsp;n(1&nbsp;&amp;lt;=&nbsp;n&nbsp;&amp;lt;=&nbsp;100000),m(1&nbsp;&amp;lt;=&nbsp;m&nbsp;&amp;lt;=&nbsp;200),分别表示&nbsp;s&nbsp;和&nbsp;t&nbsp;的长度;第二行有一行字符串&nbsp;s;第三行有一行字符串&nbsp;t。保证每个测试点的所有测试数据的&nbsp;n&nbsp;✖&nbsp;m&nbsp;的和均不超过&nbsp;20000000&nbsp;,保证所有字符均为小写字母。输出描述对于每组测试数据,输出一个正整数表示使得&nbsp;作为&nbsp;的某个连续子串出现的最少删除字符个数。若不存在答案,则输出&nbsp;-1。样例输入28&nbsp;3abcdefghacg5&nbsp;2aaaaaab样例输出4-1提示对于第一组测试数据,删除第&nbsp;2、4、5、6&nbsp;个字符后字符串变为&nbsp;acgh,字符串&nbsp;t&nbsp;=&nbsp;acg&nbsp;作为&nbsp;s&nbsp;的一个连续子串出现。对于第二组测试数据,s&nbsp;中不包含字符&nbsp;b&nbsp;,因而无论如何都不可能使得&nbsp;t&nbsp;作为&nbsp;s&nbsp;的某个连续子串出现。T3前缀和记录&nbsp;ai&nbsp;-&nbsp;bi哈希表记录每个和出现的次数题目描述:&nbsp;小A非常喜欢吃糖,尤其喜欢吃椰子糖与玉米糖。现在小A正在商店中买糖,小A有一个奇怪的癖好,他希望购买的糖满足,椰子糖的数量恰比玉米糖的数量多m个。&nbsp;商店做促销,将椰子糖与玉米糖捆绑销售,货架上一共有n个糖罐排成一排,其中第i个糖罐中包含a_i个椰子糖与b_i个玉米糖,同时要求顾客只有购买连续的一段糖罐才能享受优惠(特别地,只买某一罐也视为连续),那么小A想知道,一共有几种购买方式才能在享受商店优惠的同时,满足他奇怪的癖好。&nbsp;换而言之,求有几对二元组(L,R),(L&amp;lt;=R)满足(a_1+a_2+...+a_R)-(b_1+b_2+...+b_R)=m输入描述:&nbsp;第一行两个正整数n,m&nbsp;第二行n个正整数a_i&nbsp;第三行n个正整数b_i&nbsp;1&nbsp;≤&nbsp;n&nbsp;≤&nbsp;10^5,&nbsp;1&nbsp;≤&nbsp;a_i,&nbsp;b_i,&nbsp;m&nbsp;≤&nbsp;10^9输出描述:&nbsp;输出一个正整数,表示购买的方案数。样例输入1:3&nbsp;21&nbsp;5&nbsp;12&nbsp;2&nbsp;2样例输出1:提示:&nbsp;合法的区间&nbsp;(1,&nbsp;r)&nbsp;有&nbsp;(1,&nbsp;2)&nbsp;与&nbsp;(2,&nbsp;3)输入样例2:5&nbsp;41&nbsp;2&nbsp;3&nbsp;4&nbsp;55&nbsp;4&nbsp;3&nbsp;2&nbsp;1输出样例2:样例解释2:&nbsp;合法的区间&nbsp;(1,&nbsp;r)&nbsp;有&nbsp;(2,&nbsp;5)&nbsp;与&nbsp;(5,&nbsp;5)
投递上海得物信息集团有限公司等公司10个岗位
点赞 评论 收藏
分享
09-23 13:23
门头沟学院 Java
两个傻逼公司喜欢玩弄候选人的时间,美团hr面后说两天内给通知,结果后面忘了这回事自动挂掉了,和暑期实习如出一辙,都是终面笑嘻嘻的聊然后反手给你挂了。但是我没想到的是秋招这个hr是真的敢说,直接贴脸开大就是说现在简历库里随手抓一个简历就是985本硕,三四段大厂实习,你觉得你的优势是什么,不要你觉得,你怎么证明?我证明nm😅。面试的时候自己在那低估什么24年这一批人质量都不大行,25年的刚来不知道,得找几个有活力的能活跃气氛的硕士,当时他就直接无视我自言自语了很久,那个时候我就感觉应届生面对这些公司真的就没有尊严可言,看的不是能力合不合格,而是相比其他人合不合适。字节更是重量级,第一个部门所有面试通过,但是因为主管突然注意到我一月份的面经太差直接撤销流程,我nm😅你tm之前没发现啊。然后换第二个部门走到终面直接就是不感兴趣走个过场,一直走神不想听你说话,最后反问有什么建议直接蹬鼻子上脸说就这么点时间哪够我了解你的没有建议。最后换第三个部门走到二面聊的一切正常感觉就是必过的,然后反手又给我挂了。tm的字节整整浪费了我一个月的时间,我还是那句话,既然你觉得我学历不行,经历不垂直还是人格没有魅力等等一切因素,就不要发起面试浪费时间。剩余的也是一样的,京东,快手,科大讯飞二面挂,为什么这三个要单独说,因为一面都是面试官聊的特别好推进快,二面被老登摆脸色,摆着一副特别拽的脸色故意问你一堆八股,然后问你实习就压力你说根本没有内容,最后反问tm面试官就回答两三个字,只想快点结束,估计面评也被恶意的打的特别差,因为后续刷新一个月都没反应最后阿里全系简历挂,腾讯测评挂,好像秋招已经宣判死刑了。回望这两个月,好像自己并没有做错什么,但是感觉活的非常卑微。总计面了四十多场0offer,八股项目实习已经背的滚瓜烂熟,但是每场面试还是会担惊受怕,因为感觉自己怎么精炼回答内容都不是满意的答案,自己就像谄媚一般想尽心思怎么顺着面试官的心意现在已经彻底麻木,不愿去面试,不愿去背八股,最近两周的负反馈已经把我给压垮。我只想用一句话来形容秋招,那便是“人为刀俎,我为鱼肉”,所谓的双向选择就是扯淡,现如今应届生有什么资本去站在公司的对立面
一只末影酱:狠狠点了哥们,有些老登纯纯就是吃了互联网红利
如何判断面试是否凉了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务