虾皮笔试 虾皮笔试题 0817

笔试时间:2025年8月17日

往年笔试合集:

2023春招秋招笔试合集

2024春招秋招笔试合集

第一题:分割等和子集

给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。

样例输入

[1,5,11,5]

样例输出

true

参考题解

Python:

class Solution:
    def IsPartition(self, nums):
        m, mod = divmod(sum(nums), 2)
        if mod:
            return False
        n = len(nums)
        f = [[False] * (m + 1) for _ in range(n + 1)]
        f[0][0] = True
        for i, x in enumerate(nums, 1):
            for j in range(m + 1):
                f[i][j] = f[i - 1][j] or (j >= x and f[i - 1][j - x])
        return f[n][m]

第二题:数字比较游戏

Shopee算法团队进行团建游戏,游戏规则如下:X给出两个20以内的数字串num1和num2,长度一样,Y在10s内按规则回答:num2中有多少位数字和位置和num1完全一致(称为A),num2中有多少位数字和num1一致但位置不对(称为B)。请写出一个根据的函数,根据输入的num1和num2按规则分析,返回字符串的格式为xAyB,x和y都是数字。xA 表示num2有x位数字在num1中,且位置一致。yB 表示num2有y位数字在num1中,但位置不一致。请注意num1和num2都可能含有重复数字,每位数字只能统计一次。

样例输入

"1123","0111"

样例输出

"1A1B"

参考题解

C++:

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    string NumCompare(const string& num1, const string& num2) {
        int n = (int)num1.size();
        int a = 0, b = 0;
        vector<char> matched1(n, 0), matched2(n, 0);

        // 先数位置完全相同的(A)
        for (int i = 0; i < n; ++i) {
            if (num1[i] == num2[i]) {
                a++;
                matched1[i] = matched2[i] = 1;
            }
        }

        // 收集剩余未匹配字符
        vector<char> r1, r2;
        r1.reserve(n); r2.reserve(n);
        for (int i = 0; i < n; ++i) if (!matched1[i]) r1.push_back(num1[i]);
        for (int i = 0; i < n; ++i) if (!matched2[i]) r2.push_back(num2[i]);

        // 统计 r1 中每个字符的频次
        unordered_map<char, int> freq;
        for (char c : r1) freq[c]++;

        // 在 r2 中尽量匹配(B)
        for (char c : r2) {
            auto it = freq.find(c);
            if (it != freq.end() && it->second > 0) {
                b++;
                it->second--;
            }
        }

        return to_string(a) + "A" + to_string(b) + "B";
    }
};

Java:

import java.util.*;

class Solution {
    public String NumCompare(String num1, String num2) {
        int n = num1.length();
        int a = 0, b = 0;
        boolean[] m1 = new boolean[n], m2 = new boolean[n];

        // 先数位置完全相同的(A)
        for (int i = 0; i < n; i++) {
            if (num1.charAt(i) == num2.charAt(i)) {
                a++;
                m1[i] = m2[i] = true;
            }
        }

        // 收集剩余未匹配字符
        ArrayList<Character> r1 = new ArrayList<>();
        ArrayList<Character> r2 = new Ar

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

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

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

全部评论

相关推荐

04-12 21:52
南开大学 Java
鼠鼠有点摆,去年边学着没敢投简历,没实习。从1月到现在总共面了五次,四次字节的日常(HR打电话约面试才敢去的),然后一次腾讯的暑期,都是一面挂,其他则是没给面。暑期的岗,4.2才开始海投,前面想着等字节第四次一面后再投,结果挂,而且感觉投晚了。字节投了11个,9个简历挂,剩下2个没动静。阿里全都简历挂,剩下的在&quot;投递简历&quot;。腾讯给了一次面。然后其他大中厂、手机厂什么的都是做完测评or笔试就没下文,打开几个看也是终止流程,感觉剩下的也应该是简历挂了。感觉是简历的原因?项目部分,几次面试,感觉面试官主要就拷问过秒杀这一个点。自己说的时候会尝试把sse那条说成亮点,但除了腾讯面试官问过一下这整个点在业务方面对用户有什么用之类的问题外,其他最多只是问一下sse八股...感觉也许不是很让面试官感兴趣。这个短链接也是无人问津,就被问过一回雪花算法的设计。也许我该拿点评改改,然后再在网上找一个什么项目,凑两个,而不是用自己现在这两个项目?或者是点评改改放前面,然后原本第一个项目,把秒杀抽掉,剩下的想办法从网上火的RAG项目里移植点亮点,或者直接就用网上的RAG项目?感觉我主要还是偏向后端开发,但是感觉如果除开点评,再拿一个项目,想不到有什么自己能掌控且跟点评不重的。然后鼠鼠之前主要的问题是担心面试让打开项目演示,然后就一直花时间在用AI整第一个项目,第二个项目都没时间整,第四次面试之前还因为太害怕被认为不熟悉项目,跟AI一起把简历的说辞做了大幅度弱化,然后暑期都是拿弱化后的简历投的,感觉是不是看上去太没有吸引力就直接给简历挂了。(图1是弱化后的,图2是弱化前的,但之前3月初投了几家好像也是简历挂。)而且因为3月花了很多时间整在跟AI整代码,导致八股和算法都没怎么看,算法之前有跟灵神题单刷一些,还算入门,但是八股只看了一些基本的,可能面试的时候只答得上来60-70%,而且表述有些混乱,都是想到哪说到哪;前面几回面试基本上都有大板块的基础八股没答出来,比如RedisZ&nbsp;Set数据结构,MQ延时消息、可靠性保证,JVM内存分配的过程、GC&nbsp;roots,JUC锁,设计模式。现在有点不知道该怎么办。求大佬们给点简历修改建议或者面试准备建议,不胜感激!
何时能不做牛马:简历每个点之间的间距可以缩一下。几乎没遇到过要演示项目的情况,即使万一遇上了你也可以说部署在其他电脑上本地没代码。nku不应该简历挂吧?抓紧背背八股练练表达,不要放弃,五六月份找到也不晚(不然还得提前入职
应届生简历当中,HR最关...
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

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