8.13 贝壳笔试统计+AK参考代码



2021-08-13 更新

考试时间 20:00 - 22:00,四道编程题。

前三题都比较简单,第四题直接递归把树转化为字符串,用 C++ 内存超限只过了90%多的数据,用Python直接ac了。开始以为子树是任意的子结构都行,实际上是包含该节点和所有的子节点。

回忆了下所有题的代码,作为参考:

第一题

vector<long long> solve(int n, long long m) {
    // [0, n-1],从 1 的位置开始洒,最后 a[0] 加 1,最后洒到的位置减去 1
    long long div = m / (n - 1), mod = m % (n - 1);
    vector<long long> ans(n);
    for (int i = 1; i < n; ++i) {
        ans[i] = (div + 1) / 2;
    }
    for (int i = n - 2; i >= 0; --i) {
        ans[i] = div / 2;
    }
    int last = 0;
    if (div & 1) {
        if (mod == 0) {
            last = n - 1;
        } else {
            for (int i = n - 2; i >= 0 && mod; --i, --mod) {
                ans[i] += 1;
                last = i;
            }
        }
    } else {
        if (mod == 0) {
            last = 0;
        } else {
            for (int i = 1; i < n && mod; ++i, --mod) {
                ans[i] += 1;
                last = i;
            }
        }
    }
    ans[0] += 1;
    ans[last] -= 1;
    return ans;
}

第二题

string solve(string s, int k) {
    // 每次删除 s 中最小的字符,共删除 k 次
    // 笔试时我直接用的 set 做的,但是用位运算更优
    int mask = 0;
    for (char c : s) {
        mask |= 1 << (c - 'a');
    }
    for (int i = 0; i < 26 && k; ++i) {
        if (mask & (1 << i)) {
            mask &= ~(1 << i);
            k -= 1;
        }
    }
    string ans;
    for (char c : s) {
        if (mask & (1 << (c - 'a'))) {
            ans += c;
        }
    }
    return ans;
}

第三题

long long solve(vector<int> &a, int t) {
    int n = a.size();
    long long ans = 0;
    unordered_map<int, int> index;
    int pre = 0;
    for (int i = 0; i < n; ++i) {
        int b = a[i] ^ t;
        int k = index.count(b) ? index[b] + 1 : 0;
        k = max(k, pre);
        pre = k;
        ans += i - k;
        index[a[i]] = i;
    }
    return ans;
}

第四题

import sys
from collections import defaultdict

sys.setrecursionlimit(100005)


def solve(root):
    pattern = defaultdict(int)
    size = defaultdict(int)

    def dfs(root):
        if root is None:
            return ("()", 0)
        l_s, l_cnt = dfs(root.left)
        r_s, r_cnt = dfs(root.right)
        s = "(" + l_s + str(root.val) + r_s + ")"
        cnt = 1 + l_cnt + r_cnt
        pattern[s] += 1
        size[s] = cnt
        return (s, cnt)

    dfs(root)
    ans = 0
    for k, v in pattern.items():
        if v > 1:
            ans = max(ans, size[k])
    return ans







#贝壳##笔试题型##贝壳找房#
全部评论
我太菜了,前三道中的比较简单码
点赞 回复 分享
发布于 2021-08-13 22:12
第三题能说说思路吗老哥
点赞 回复 分享
发布于 2021-08-13 22:14
第三题怎么做呀大佬
点赞 回复 分享
发布于 2021-08-13 22:17
假设有数组[1,2,3,4,5],这里的1,2,3,4,5不代表数组中的值,表示索引。下同。 如果[2,3]处的值可以异或成t,那么区间有[1,2,3],[1,2,3,4],[1,2,3,4,5],[2,3],[2,3,4],[2,3,4,5]这6个区间。我们将这个6个区间以左端点和右端点组成一对xy坐标放到二维坐标上。 如下第一张图 如果还有其他的点可以异或成t,假设[3,4]。由[3,4]可得的区间有[1,2,3,4],[2,3,4],[3,4],[3,4,5],同样可以处理到坐标轴上。如第二张图。 我们只要计算最后没有被覆盖到的面积。即可。
点赞 回复 分享
发布于 2021-08-14 00:12
第二题, Python 超级简单, 你直接循环 k 次从 'a&(417)#39; 遍历到 'z&#39; replace 一下就行了
点赞 回复 分享
发布于 2021-08-16 09:35
有人收到面试通知了吗
点赞 回复 分享
发布于 2021-08-18 09:58

相关推荐

牛客765689665号:没有实习是硬伤,央国企看学历
点赞 评论 收藏
分享
不放弃的小鱼干很洒脱:好可爱的离职理由
点赞 评论 收藏
分享
03-19 18:10
已编辑
门头沟学院 Unity3D客户端
如题,鼠鼠快碎掉了。鼠鼠正在投暑期和日常的实习,可能是因为简历太差吧,好多初筛都没有过,所以其实格外珍惜每一次的约面。尤其鼠鼠是八股选手,但凡碰到喜欢问项目的面试官是直接速通鼠掉。那是一个万里无云的晚上,鼠鼠接到tx某子公司的约面,虽然没算法题但是问得我汗流浃背。面试官从我的八股批判到我的项目继而批判到我的实习,感觉基本上除了八股这种特定答案之外每一个问题都要质问我,尤其是询问到实习的时候我解释完之后直接来了一句“那你实习也啥也没做啊”,鼠鼠直接原地碎掉。之后的问题鼠鼠也不太记得了,大部分都是直接吟诵咒语,肌肉记忆直接不过脑子。因为接二连三的压力鼠鼠直接摆烂了,回答的时候也不太看屏幕直接开始搓...
机器人为什么是猫呀:楼主要自信。好的面试官是会照顾面试者情绪的,不会直接说那么伤人的话。面试表现其实很看自己的心态跟情绪,这些又和面试官的反馈很相关。而且有些面试官很高傲,不求甚解,自认为你的东西看一眼很简单,就不会听你说了,却没有从一个没有丰富工作经验的人的角度去思考。楼主不要因为这些影响心态,不要怀疑自己,只要遇到一个“合适”的面试官就会好很多的。
点赞 评论 收藏
分享
评论
1
15
分享

创作者周榜

更多
牛客网
牛客企业服务