滴滴笔试 滴滴笔试题 0928

笔试时间:2024年09月28日 秋招

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

第一题

题目

小R过年收到了很多压岁钱,所以他想拿去买玩具。小R总共收到了 m 元压岁钱。商店里有10^9种玩具,种类编号为1~10^9,第i种玩具的价格为i元。但是小R已经有了其中n种玩具了,他不喜欢重复,所以每种玩具他最多只想拥有一个,已经有的就不会再买了,没有的也只会买最多一个。现在小R想知道他最多能再买多少种玩具。

输入描述

第一行两个整数 n,m,表示已有玩具的种类数和压岁钱数量。

接下来一行n个整数a1,a2,…an,表示小R拥有的所有玩具的编号。

对于 100% 的数据,2<=n<=100000,1<=ai,m<=10^9,保证ai,互不相同。

输出描述

输出一个整数表示小R最多能再买多少种玩具。

样例输入

5 16

2 5 9 10 100

样例输出

4

参考题解

贪心的选择,遇到已经存在的就跳过,直接遍历即可。

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

#include<bits/stdc++.h>
using namespace std;
int main() {
    int n, m;
    cin >> n >> m;
    unordered_set<int> st;
    for (int i = 0; i < n; i++) {
        int x;
        cin >> x;
        st.insert(x);
    }
    
    int cur = 1;
    int ans = 0;
    while (m >= cur) {
        if (st.count(cur)) {
            cur++;
            continue;
        }
        ans++;
        m -= cur;
        cur++;
    }
    
    cout << ans << "\n";
}

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

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        
        Set<Integer> st = new HashSet<>();
        for (int i = 0; i < n; i++) {
            int x = sc.nextInt();
            st.add(x);
        }
        
        int cur = 1;
        int ans = 0;
        while (m >= cur) {
            if (st.contains(cur)) {
                cur++;
               

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

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

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

全部评论

相关推荐

点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务