饿了么笔试 饿了么笔试题 0412

笔试时间:2024年04月12日

历史笔试传送门:2023秋招笔试合集

第一题

题目:小红的质数合数

小红有一个数组,她想知道这个数组不同的质数和不同的合数共有多少个。合数是指在大于1的整数中除了能被1和本身整除外,还能被其他数(O除外)整除的数。

输入描述

第一行输入一个整数n(1<= n<=2 x 10^5)表示数组长度。

第二行输入n个整数表示数组ai。

输出描述

输出一个整数。

样例输入

3

20 2 4

样例输出

3

参考题解

C++:[此代码未进行大量数据的测试,仅供参考]

#include <iostream>
#include <unordered_set>
using namespace std;

int main() {
    int n; cin >> n;
    unordered_set<int> st;
    for (int i = 0; i < n; ++i) {
        int a; cin >> a;
        if (a > 1) {
            st.emplace(a);
        }
    }
    cout << st.size();
}

Java:[此代码未进行大量数据的测试,仅供参考]

import java.util.HashSet;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        HashSet<Integer> set = new HashSet<>();
        for (int i = 0; i < n; ++i) {
            int a = scanner.nextInt();
            if (a > 1) {
                set.add(a);
            }
        }
        System.out.println(set.size());
    }
}

Python:[此代码未进行大量数据的测试,仅供参考]

n = int(input())
st = set()
for _ in range(n):
    a = int(input())
    if a > 1:
        st.add(a)
print(len(st))

第二题

题目:小苯的数组查询

小苯有一个长度为n的数组α。它定义了一个函数:

f(l,r) = al|al + 1|ar。

(|表示位运算中的按位或运算)

现在他有q次询问,每次询问他都会给出一个区间[l,r],以及一个正整数k,他想知道在区间中是否存在一个右端点r',使得f(l, r')请你帮帮他处理每次询问吧。

输入描述

输入包含若干行。 第一行两个正整数n,q(),分别表示数组α的长度和小苯的询问次数。

第二行n个正整数,表示数组α的每个元素。

接下来q行,每行三个正整数l,r,k

输出描述

输出包含q行,每行一个整数,如果存在符合条件的,请输出最小的一个,如果不存在输出一个-1。

样例输入

5 5

3 2 3 3 6

1 2 3

1 5 7

1 4 7

2 2 2

2 3 7

样例输出

1

5

-1

2

-1

说明

第一个询问,区间[1.2]中,选择r=1,区间[1,1]的f值为3,因此输出1。

参考题解

比较典型的题目,遇到按位或运算,可以考虑前缀和,因为bit的数目是递增的,可以先统计每个数位上1的数目的前缀和;然后对于每一次询问,采用二分查找来找到最左边符合条件的索引。在二分查找中,利用前缀和数组构建当前区间所有元素按位或的和,判断其与k的大小关系,从而收缩左右边界。

C++:[此代码未进行大量数据的测试,仅供参考]

#include <iostream>
#include <vector>
using namespace std;
using ll = long long;

int main() {
    int n, q; cin >> n >> q;
    vector<int> a(n);
    vector<vector<int>> S(n + 2, vector<int>(32, 0));
    for (int i = 0; i < n; ++i) {
        cin >> a[i];
        S[i + 1] = S[i];
        for (int j = 0; j < 32; ++j) S[i + 1][j] += (a[i] >> j & 1);
    }
    for (int i = 0; i < q; ++i) {
        ll left, right, k; cin >> left >> right >> k;
        left--, right--;
        ll cur = 0, l = left, r = right;
        while (l <= r) {
            ll mid = (l + r) / 2;
            cur = 0;
            for (int j = 0; j < 32; ++j) {
                int c = S[mid + 1][j] - S[left][j];
                if (c) cur |= (1 << j);
            }
            if (cur >= k) r = mid - 1;
            else l = mid + 1;
        }
        cur = 0;
        for (int j = 0; j < 32; ++j) {
            int c = S[l + 1][j] - S[left][j];
            if (c) cur |= (1 << j);
        }
        if (cur == k && l + 1 <= right + 1) cout << l + 1 << "\n";
        else cout << "-1\n";
    }
}

Java:[此代码未进行大量数据的测试,仅供参考]

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int q = scanner.nextInt();
        int[] a = new int[n];
        int[][] S = new int[n + 2][32];

        for (int i = 0; i < n; ++i) {
            a[i] = scanner.nextInt();
            System.arraycopy(S[i], 0, S[i + 1], 0, 32);
            for (int j = 0; j < 32; ++j)
                S[i + 1

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

2024 BAT笔试合集 文章被收录于专栏

持续收录字节、腾讯、阿里、美团、美团、拼多多、华为等笔试题解,包含python、C++、Java多种语言版本,持续更新中。

全部评论

相关推荐

03-31 21:35
已编辑
西安电子科技大学 Java
谨以此篇,记录自己荒废的曾经和不甘的心情。倒是没想到还有这精力在这搞文艺🤕。晚上面的阿里云一面,被打烂。太过分的没有危机感,两周速成的Java,在此之前的就一个没有深入学习就是照葫芦画瓢的旧技术栈的小项目,实验室其他项目也没有深度参与😮‍💨。还以为是暑假实习就五六月份着就可以了,被这“金三银四”赶鸭子上架似的。焦虑不安😔。上周硬着头皮肘了美团和饿了么的笔试,自己的处女面和表现的不错答的很多的第二面,我还挺满意的。甚至让我安心到觉得八股也就这样了。看不进去我周围的人很强,不是专门贩卖焦虑的强,是他们早有计划早有安排早在,学习。而我不自知。明明是知道的,上个这研究生就是给自己玩了四年的大学做个缓冲,就是为了到自己想去的岗位多一份可能。但我抛到脑后,但我👇不自律。从项目出发,问了半小时,就打倒我很多,也就没有手撕了。也许面试官也是愣了一下的,我居然没有其他问题问了。面经:从项目出发,问表的设计,问UUID为什么选择他(项目业务需要),让自己选你怎么选?我答的也不满意,嘴染,答的点被面试官一句:你的意思是业务需要是吧。到其他的ID选择答出大概然后被追问。问为什么用雪花,那我用其他的比如自己设就用时间戳当作ID行不行?我答的东扯一下西扯一下,没有纲领。问MySQL事务的特点?事务的特点是怎样去实现的?卡壳,竟然一时之间没有想起来,后面去回答也是突然想起来,没有纲领,潦草。问MySQL的锁?脑子白到居然反问面试官你是不是想问间隙锁?其实我是知道的,我才看了的,专门对MySQL的锁做了总结。问你用了消息队列?你为什么要用Rabbit&nbsp;MQ而不用其他的,你是出于什么考虑?只答概念没有实质,没说出消息队列之间为什么有这样的效果差异。问消息队列的场景题进行优化,最死亡的来了,我说了用死信队列进行正常队列中消费者消费不下将一些消息放在死信队列的说法。😶潦草收尾我的表现,我是无感的,没什么可说的,这就是我。在处女面之前我的焦虑和不安,那也是我。在只有笔试的遮盖布下,但今天我的面貌才被揭开罢了。面试,是综合素质的体现,至少比笔试。我不甘。还有,今天尊敬的面试官,谢了🫡。潦草收尾来不及表示感谢,秋招我再来。 #面经#&nbsp;&nbsp;#暑假实习#&nbsp;&nbsp;#阿里云#
查看7道真题和解析
点赞 评论 收藏
分享
评论
点赞
6
分享

创作者周榜

更多
牛客网
牛客企业服务