字节青训-小C的外卖超时判断、小C的排列询问
目录
一、小C的外卖超时判断
问题描述
测试样例
解题思路:
问题理解
数据结构选择
算法步骤
最终代码:
运行结果:
二、小C的排列询问
问题描述
测试样例
最终代码:
运行结果:
编辑
一、小C的外卖超时判断
问题描述
小C点了一个外卖,并且急切地等待着骑手的送达。她想知道她的外卖是否超时了。
已知小C在时刻 t1
点了外卖,外卖平台上显示的预计送达时间为 t2
,而实际送达时间为 t3
。需要判断外卖是否超时。如果外卖超时,则输出 "Yes"
;否则输出 "No"
。
t3
在 t2
之后则认定为超时。
实际送达时间与预计送达时间在 2
小时之内。
测试样例
示例 1:
输入:
t1 = "18:00", t2 = "19:05", t3 = "19:05"
输出:"No"
示例 2:
输入:
t1 = "23:00", t2 = "00:21", t3 = "00:23"
输出:"Yes"
示例 3:
输入:
t1 = "23:05", t2 = "00:05", t3 = "23:58"
输出:"No"
解题思路:
问题理解
我们需要判断外卖是否超时。具体来说,如果实际送达时间 t3
在预计送达时间 t2
之后,则认定为超时。
数据结构选择
由于输入的时间是字符串格式(例如 "18:00"
),我们需要将这些时间转换为可以比较的格式。一种常见的方法是将时间转换为分钟数(从当天的00:00开始计算)。
算法步骤
- 解析时间字符串:将
t1
,t2
,t3
解析为小时和分钟。 - 转换为分钟数:将小时和分钟转换为从当天00:00开始的分钟数。
- 比较时间:比较
t3
和t2
的分钟数。如果t3
大于t2
,则输出"Yes"
,否则输出"No"
。
最终代码:
#include <iostream>
#include <string>
using namespace std;
std::string solution(const std::string& t1, const std::string& t2, const std::string& t3) {
// 解析时间字符串
int t1_hour = std::stoi(t1.substr(0, 2));
int t1_minute = std::stoi(t1.substr(3, 2));
int t2_hour = std::stoi(t2.substr(0, 2));
int t2_minute = std::stoi(t2.substr(3, 2));
int t3_hour = std::stoi(t3.substr(0, 2));
int t3_minute = std::stoi(t3.substr(3, 2));
// 转换为分钟数
int t1_minutes = t1_hour * 60 + t1_minute;
int t2_minutes = t2_hour * 60 + t2_minute;
int t3_minutes = t3_hour * 60 + t3_minute;
// 处理跨天情况
if (t2_minutes < t1_minutes) {
t2_minutes += 24 * 60; // 加上一天的分钟数
}
if (t3_minutes < t1_minutes) {
t3_minutes += 24 * 60; // 加上一天的分钟数
}
// 计算时间差
int t2_diff = t2_minutes - t1_minutes;
int t3_diff = t3_minutes - t1_minutes;
// 比较时间差
if (t3_diff <= t2_diff) {
return "No";
} else {
return "Yes";
}
}
int main() {
std::cout << (solution("18:00", "19:05", "19:05") == "No") << std::endl;
std::cout << (solution("23:00", "00:21", "00:23") == "Yes") << std::endl;
std::cout << (solution("23:05", "00:05", "23:58") == "No") << std::endl;
return 0;
}
运行结果:
二、小C的排列询问
问题描述
小C拿到了一个排列,她想知道在这个排列中,元素 xx 和 yy 是否是相邻的。排列是一个长度为 nn 的数组,其中每个数字从 11 到 nn 恰好出现一次。
你的任务是判断在给定的排列中,xx 和 yy 是否是相邻的。
测试样例
样例1:
输入:
n = 4, a = [1, 4, 2, 3], x = 2, y = 4
输出:True
样例2:
输入:
n = 5, a = [3, 4, 5, 1, 2], x = 3, y = 2
输出:False
样例3:
输入:
n = 6, a = [6, 1, 5, 2, 4, 3], x = 5, y = 2
输出:True
最终代码:
#include <iostream>
#include <vector>
using namespace std;
bool solution(int n, vector<int> a, int x, int y) {
// 遍历数组
for (int i = 0; i < n - 1; i++) {
// 检查当前元素和下一个元素是否分别是 x 和 y,或者 y 和 x
if ((a[i] == x && a[i + 1] == y) || (a[i] == y && a[i + 1] == x)) {
return true;
}
}
// 如果没有找到相邻的 x 和 y,返回 false
return false;
}
int main() {
cout << (solution(4, {1, 4, 2, 3}, 2, 4) == true) << endl;
cout << (solution(5, {3, 4, 5, 1, 2}, 3, 2) == false) << endl;
cout << (solution(6, {6, 1, 5, 2, 4, 3}, 5, 2) == true) << endl;
return 0;
}