滴滴笔试 滴滴笔试题 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多种语言版本,持续更新中。