作业帮25暑期实习笔试

一个字符串,一个思维,一个树状数组。

  1. 解析http的GET请求,输入一个http的url以及一个key,中间用空格隔开。输入key对应的value

Input:

https://www.baidu.com?id=123&age=18 id

Output:

123

Code:

#include <bits/stdc++.h>

using namespace std;

int main() {
    string s, t;
    bool f = false;
    cin >> s >> t;
    unordered_map<string, string> mp;
    for (int i = 0; i < s.size(); i++) {
        if (s[i] == '?') {
            f = true; continue;
        }
        if (!f) continue;
        int j = i;
        while (j < s.size() && s[j] != '=') j++;
        string key = s.substr(i, j - i);
        i = j;
        while (i < s.size() && s[i] != '&') i++;
        string val = s.substr(j + 1, i - j - 1);
        mp[key] = val;
    }
    cout << mp[t];
    return 0;
}
  1. 给一个数组,求数组中任意三个数乘积的最大值。 Input:
1,2,-5,-6,-2,4,3

Output:

120

Code:

#include <bits/stdc++.h>

using namespace std;

int main() {
    string s;
    cin >> s;
    vector<int> nums;
    nums.clear();
    int i = 0, base = 0, t = 1;
    while (i < s.size() && s[i] != ',') {
        if (s[i] == '-') t = -1;
        else base = base * 10 + s[i] - '0';
        ++i;
    }
    nums.push_back(base * t);
    for (; i < s.size(); ++i) {
        while (i < s.size() && s[i] != ',') {
            if (s[i] == '-') t = -1;
            else base = base * 10 + s[i] - '0';
            ++i;
        }
        nums.push_back(base * t);
        base = 0;
        t = 1;
    }
    sort(nums.begin(), nums.end());
    vector<int> ban;
    ban.clear();
    if (nums.size() <= 6) ban = nums;
    else {
        for (int i = 0; i < 3; ++i) ban.push_back(nums[i]);
        for (int i = nums.size() - 3; i < nums.size(); ++i) ban.push_back(nums[i]);
    }
    int ans = -0x3f3f3f3f;
    for (int i = 0; i < ban.size(); ++i) 
        for (int j = i + 1; j < ban.size(); ++j)
            for (int k = j + 1; k < ban.size(); ++k) {
                int x = ban[i], y = ban[j], z = ban[k];
                ans = max(ans, x * y * z);  
            }
    cout << ans;
    return 0;
}
  1. 给一个长度为n的整型数组a[i] (1 <= i <= n)表示颜色,由该数组拓展为一个无限长的彩带a,其中a[i]=a[i-n] (i>n)a[i]表示该彩带在位置i的颜色。
  • 现在给q个操作,每个操作由一个字符c以及一个整数x组成。其中字符c'L''R',如果c='L'那么表示从左向右剪该彩带,如果c='R'那么表示从右向左剪该彩带。x表示剪下的长度。
  • 求剪下的彩带里不同颜色的个数。
  • 输入第一行nq,第二行n个数表示a[i],接下来q行,每行一个cx
  • n, q <= 2e5

Input:

6 3
1 1 4 5 1 4
L 2
L 3
R 12

Output:

1
3
3

Hint:

初始彩带为:1 1 4 5 1 4 1 1 4 5 1 4 1 1 4 5 1 4 ... 1 1 4 5 1 4
第一次从左往右剪长度为 2,剪下的彩带为:1 1,其中不同的颜色有1个。
这时彩带为:4 5 1 4 1 1 4 5 1 4 1 1 4 5 1 4 ... 1 1 4 5 1 4
第二次从左往右剪长度为 3,剪下的彩带为:4 5 1,其中不同的颜色3个。
这时彩带为:4 1 1 4 5 1 4 1 1 4 5 1 4 ... 1 1 4 5 1 4
第三次从右往左剪长度为 12,剪下的彩带为:1 1 4 5 1 4 1 1 4 5 1 4,其中不同的颜色有3个。
这时彩带为:4 1 1 4 5 1 4 1 1 4 5 1 4 ... 1 1 4 5 1 4

Code:

#include <bits/stdc++.h>

using namespace std;

const int N = 4e5 + 10;

int n, q, a[N], mx;
int tr[N], ans[N];

struct node {
    int l, r, id;
    bool f;
    bool operator<(const node &t) const {
        return r < t.r; 
    }
}op[N];

int lt(int x) {
    return x & -x;
}

void add(int x, int v) {
    for (int i = x; i <= n; i += lt(i)) tr[i] += v; 
}

int query(int x) {
    int res = 0;
    for (int i = x; i; i -= lt(i)) res += tr[i];
    return res; 
}

int main() {
    scanf("%d%d", &n, &q);
    unordered_map<int, bool> st;
    for (int i = 1; i <= n; ++i) {
        scanf("%d", a + i);
        if (!st[a[i]]) {
            st[a[i]] = 1;
            ++mx;
        }
    }
    for (int i = n + 1; i <= 2 * n; ++i) a[i] = a[i - n];
    int L = 1, R = 2 * n;
    for (int i = 1; i <= q; ++i) {
        char c; int x, l, r;
        getchar();
        scanf("%c%d", &c, &x);
        op[i].id = i;
        if (x >= n) op[i].f = 1;
        else op[i].f = 0;
        x %= n;
        if (c == 'L') {
            l = L, r = L + x - 1;
            L = r + 1; if (L > n) L -= n;
        }
        else {
            l = R - x + 1, r = R;
            R = l - 1; if (R <= n) R += n;
        }
        op[i].l = l, op[i].r = r;
    }
    sort(op + 1, op + 1 + q);
    unordered_map<int, int> pre;
    int pos = 0;
    for (int i = 1; i <= q; ++i) {
        int l = op[i].l, r = op[i].r, id = op[i].id;
        if (op[i].f) ans[id] = mx;
        else {
            while (pos < r) {
                ++pos;
                if (pre[a[pos]]) add(pre[a[pos]], -1);
                add(pos, 1);
                pre[a[pos]] = pos;
            }
            ans[id] = query(r) - query(l - 1);
        }
    }
    for (int i = 1; i <= q; ++i) printf("%d\n", ans[i]);
    return 0;
}
#作业帮笔试#
全部评论
你这是臭带罢
2 回复 分享
发布于 03-21 19:52 湖北
第二题好臭
点赞 回复 分享
发布于 04-15 16:49 陕西
C题代码是正确的?
点赞 回复 分享
发布于 04-10 22:55 山东

相关推荐

作业帮时间是随机的,今天下午测的。作业帮是10道选择题加2到算法题:选择题:考了数据结构排序二叉树,linux命令:awk&nbsp;'$NF'&nbsp;test&nbsp;这里的test是一个有多行数据的文件,这命令是输出该文件末行的内容。还考了mapreduce优化数据倾斜的办法这里我好像选错了有两个选项一个是把count(distinct&nbsp;)&nbsp;替换为sum()group&nbsp;by&nbsp;还有是将小文件先保存到内存中这两个好像是对的都可以优化数据倾斜此问题。还考了Flink的一些特性不过我还没学过flink,还考了kafka的高性能和低性能的一些问题,这我也是一脸懵。还考了六个盘的汉洛塔要移动几次才通过。然后是算法题,第一个是简单的二分查找,不过我只通过了94%,后面看估计是我对左右指针移动还是有点问题。第二个是leetcode32题,最长有效括号,可惜了我两个月前还写过但是还是没写对,只通过了63%。也不知道能不能过。阅文(寄了,以为是8.30考没想到是8.30结束结果只写了20分钟):这好像是前面是单选题,中间是不定项,后面是问答题单选题:考了hive内置函数,考了hive与spark的对比,hadoop节点默认备份是多少~(还考了斗破苍穹的主角是谁虽然我没看过印像中好像叫萧炎)不定项:有mysql中delete,drop和truncate这三者的区别特点(我对truncate完全没印象),还考了flink的一些知识。问答题:第一个是mapredce工作流程这个还好,第二个是如何解决spark数据倾斜的方法。这里时间不够了我一点没写,也没多少印象。这里我现在写一下加深点印象1.可以增加随机前缀或后缀:来打散数据分布,在后继计算中去除前后缀从而负载均衡2.广播小表,如果是原因是小表与大表join可以将小表广播到每个节点,避免产生数据倾斜。3.salting方法:为倾斜数据填加盐值,打散倾斜数据4.分区策略调整:通过自定义分区器或者合理选择内置分区器来均匀分布数据5.增大并行度:针对只有少量数据造成的倾斜任务,增加并行度可以更快地处理这些小任务6.数据预处理:合并一些小文件,fliter操作等第三四个就是写sql语句,第三个挺简单的就是第四题来不及看了。ok就是这些了,预祝大家都能找到自己想要的工作实现,我还是继续去沉淀去了,这一个月也不知道自己在忙些啥好像就是一直在刷算法题和sql题,八股都没怎么看,对组件的掌握还是太浅了。
查看14道真题和解析 投递阅文集团等公司6个岗位 数据人的面试交流地
点赞 评论 收藏
分享
04-29 10:00
已编辑
电子科技大学 算法工程师
从3.8号开始投简历,整个3月只零星收到几场面试,而且前几场都面挂了,整个人就陷入了很大的焦虑中。不过从清明之后面试就多了起来,基本上每天都有两到三场面试,面试通过率也增加了很多。整体面下来的感受就是,一定要对简历上的内容了如指掌。一是要能完整的讲清楚自己做的工作,二是能经得起问。手撕基本上把hot100刷个两三遍就能应对大部分的面试了。算法八股基本上没被问过,主要还是问简历。附一个timelineOC:小红书多模态:3.26投递,3.28一面,4.7二面,二面完当天oc高德大模型:3.24投递,4.3一面,4.10二面,4.14oc京东风控:3.9投递,4.7一面,4.9二面,4.14三面,4.16octemu搜推:3.16投递,3.29一面,4.2二面,4.11三面,4.18hr面,现在还在排序。微信搜索:4.10一面,4.14二面,4.21面委会面,4.23hr面,4.27oc。二面挂:微信安全:3.8投递,3.20一面,3.25二面,半小时秒挂。阿里达摩院:3.24投递,4.7一面,4.14二面,第二天挂一面挂:抖音搜索、剪映推荐、阿里云(连挂三轮)、淘天、快手大模型主动结束流程的:作业帮:4.1一面,4.9二面黑翼资产:4.2一面,4.9二面百度智能云:4.3一面,4.25二面快手广告:4.8一面,4.25二面,当天面试官加微信问意向,wxg&nbsp;oc后拒优酷:4.15一面,4.21二面字节风控:4.15一面,4.21二面,4.23三面,4.28hr面泡简历:b站、oppo、蚂蚁、饿了么、虾皮
点赞 评论 收藏
分享
评论
10
59
分享

创作者周榜

更多
牛客网
牛客企业服务