当前位置: 首页 > article >正文

字节青训-小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开始计算)。

算法步骤

  1. 解析时间字符串:将 t1t2t3 解析为小时和分钟。
  2. 转换为分钟数:将小时和分钟转换为从当天00:00开始的分钟数。
  3. 比较时间:比较 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;
}

运行结果: 

 


http://www.kler.cn/a/398949.html

相关文章:

  • Failed to create a temp file - Jenkins 无法创建任务
  • ElementPlus el-upload上传组件on-change只触发一次
  • 探索美赛:从准备到挑战的详细指南
  • 数据集的重要性:如何构建AIGC训练集
  • 每日一博 - Java的Shallow Copy和Deep Copy
  • 【H3C华三 】VRRP与BFD、Track联动配置案例
  • Centos 7 安装wget
  • Vue3 provide 和 inject的使用
  • 深度学习面试题二
  • JavaWeb--MySQL
  • 聚合查询(查询)
  • 使用 Prompt API 与您的对象聊天
  • [Docker#9] 存储卷 | Volume、Bind、Tmpfs | -v/mount | MySQL 灾难恢复 | 问题
  • 基于Java Springboot学生管理系统
  • 2024 同一个网段,反弹shell四种方法【linux版本】bash、python、nc、villian反弹shell图解步骤
  • 2024 Visual Studio Code的下载与安装
  • NavVis VLX3的精度怎么去进行验证?【上海沪敖3D】
  • 前端框架 详解遍历数组为何需要加Key
  • 简单的爬虫脚本编写
  • 每日计划-1117
  • 拓扑学与DNA双螺旋结构的奇妙连接:从算法到分子模拟
  • 【MySQL-1】MySQL数据库的基本操作
  • 如何在 Spring MVC 中使用 `@PostMapping`? 如何在 Spring MVC 中使用 `@PutMapping`?
  • Linux:版本控制器git和调试工具cgdb
  • react+hook+vite项目使用eletron打包成桌面应用+可以热更新
  • 使用 Python 和 Selenium 解决 hCaptcha:完整指南