滴滴笔试 滴滴笔试题 0907
笔试时间:2024年09月07日 秋招
历史笔试传送门:2023秋招笔试合集
第一题
题目:最佳速通时间
小C准备参加某个游戏的速通比赛,为此他对该游戏速通了 n次,每次速通记录可以用一个数组 A={a1,a2……am}表示,其中a表示小C 从游戏开始到第i个游戏节点所花赛的时间,m 为游戏节点的个数。请根据小 C 的速通记录计算出他的理论最佳速通时间,理论最佳速通时问指:小C在每两个相邻的游戏节点之间所花费的时间均达到了历史最佳记录,在此情况下所花费的总时间。
输入描述
第一行两个正整数 n,m,表示有 n个速通记录,每个速通记录有 m 个游戏节点;
接下来n行,每行 m 个正整数,第i行的第j个数 aij表示在第i次速通记录中,从游戏开始到第j个游戏节点所花费的时间;
对于第i行数据 ai1,ai2,…, aim,满足0 < ai1 < ai2<...... < aim;
数据保证:1≤n≤300,1≤m≤300,1≤aij≤100 000 00。
输出描述
一行一个整数,表示理论的最佳速通时间。
样例输入
3 5
1 4 7 9 13
2 3 8 11 14
1 3 7 12 13
样例输出
8
参考题解
初始化一个长度为 m 的数组 a,用于存储每个游戏节点之间的最小时间差。初始值设为无穷大。初始化变量 s 用于累加理论最佳速通时间。遍历每次速通记录:对于每次速通记录,遍历每个游戏节点。计算当前游戏节点与前一个游戏节点之间的时间差,并与 a 数组中对应位置的值进行比较,取最小值。如果当前是最后一次速通记录,则将 a 数组中的值累加到 s 中。
C++:[此代码未进行大量数据的测试,仅供参考]
#include <iostream> #include <vector> #include <limits> using namespace std; int main() { int m, n; cin >> m >> n; vector<int> a(n, numeric_limits<int>::max()); int s = 0; vector<vector<int>> nums(m, vector<int>(n)); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { cin >> nums[i][j]; } } for (int i = 0; i < m; i++) { int pre = 0; for (int j = 0; j < n; j++) { int cur = nums[i][j]; a[j] = min(a[j], cur - pre); pre = cur; if (i == m - 1) { s += a[j]; } } } cout << s << endl; return 0; }
Java:[此代码未进行大量数据的测试,仅供参考]
import java.util.Scanner; import java.util.Arrays; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int m = sc.nextInt(); int n = sc.nextInt(); sc.nextLine(); // Consume the newline character after integers int[] a = new int[n]; Arra
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
持续收录字节、腾讯、阿里、美团、美团、拼多多、华为等笔试题解,包含python、C++、Java多种语言版本,持续更新中。