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

力扣469A

文章目录

  • 1. 题目链接
  • 2. 题目代码
  • 3. 题目总结
  • 4. 代码分析

1. 题目链接

I Wanna Be the Guy

2. 题目代码

#include<iostream>
#include<set>
using namespace std;
int main(){int highestLevelOfGame;cin >> highestLevelOfGame;set<int> levelCanPass;int levelOfXPass;cin >> levelOfXPass;int level;while(levelOfXPass --){cin >> level;levelCanPass.insert(level);}int levelOfYPass;cin >> levelOfYPass;while(levelOfYPass --){cin >> level;levelCanPass.insert(level);}if(levelCanPass.size() == highestLevelOfGame){cout << "I become the guy.";}else{cout << "Oh, my keyboard!";}return 0;
}

3. 题目总结

用时:31min
卡住原因:审题不清 – 以为整个第二行都是X可以通过的等级,第三行都是Y可以通过的等级,从而认为第二、三的数据个数无法判断。于是想到用string类型的数据获取二、三行数据(考虑到有空格,输入方式应该采用getline(cin, 字符串名) )。接下来的代码实现我考虑了两个方案:① 使用双重for循环。第一层循环遍历游戏的等级(1-n),第二层循环遍历X、Y可以通过的等级。看看是否X、Y是否包含1到n的所有数值。② 单重循环。但是要把X、Y字符串里的所有数据先整合到一个set容器里。

4. 代码分析

参照代码来源:
在这里插入图片描述
注:set.count()

#include <iostream>
#include <set>using namespace std;int main() {int n;cin >> n;set<int> x_levels, y_levels;int p;cin >> p;for (int i = 0; i < p; ++i) {int level;cin >> level;x_levels.insert(level);}int q;cin >> q;for (int i = 0; i < q; ++i) {int level;cin >> level;y_levels.insert(level);}bool can_pass_all_levels = true;for (int i = 1; i <= n; ++i) {if (!(x_levels.count(i) || y_levels.count(i))) {can_pass_all_levels = false;break;}}if (can_pass_all_levels) {cout << "I become the guy." << endl;} else {cout << "Oh, my keyboard!" << endl;}return 0;
}

我的代码耗时:78ms
内存占用:0KB

问:为什么人家的代码比我多了一个for循环,但是比我的耗时还少?
答(回复来自gpt):
代码比对:
① 输入处理方式:
        参考代码:通过明确读取 p 和 q 的值来确定循环次数,然后每次循环分别读取并插入到两个不同的 set 中。
        我的代码:使用了 while 循环来处理输入,但没有显式地指定循环次数,而是依赖 levelOfXPass 和 levelOfYPass 变量来控制循环次数。这种方式可能在输入处理上引入了更多的复杂性和可能的性能开销。
集合操作:
② 集合操作:
        参考代码:在判断是否可以通过所有关卡时,通过遍历从 1 到 n 的整数来检查每个关卡是否在 x_levels 或 y_levels 中。
        我的代码:通过比较 levelCanPass 集合的大小和 highestLevelOfGame 的值来判断是否可以通过所有关卡。这种方法简化了判断逻辑,但在集合操作上,需要考虑集合的插入和去重操作的性能开销。
性能差异的可能原因:
① 输入操作效率:
        我的代码的输入处理方式可能会比第一段代码更复杂,尤其是在处理大量输入时,可能会影响整体性能。
② 集合操作效率:
        虽然两者都使用了 set 数据结构,但集合的插入操作可能受到输入量的影响。特别是我的代码中的 insert 操作可能需要更多的内部重排或重新哈希,这可能会导致性能略微下降。
优化建议:
        简化输入处理逻辑,减少不必要的数据结构操作,以及选择更适合具体应用场景的数据结构和算法。

相关文章:

  • C++ 50 之 继承中的对象模型
  • 就因为没在大屏项目加全屏按钮,早上在地铁挨了领导一顿骂
  • javaweb 期末复习
  • 分页插件结合collection标签后分页数量不准确的问题
  • 小知识点快速总结:Batch Normalization Layer(BN层)的作用
  • phpcms仿蚁乐购淘宝客网站模板
  • android的surface
  • Sui主网升级至V1.27.2版本
  • Z世代职场价值观的重塑:从“班味”心态到个人成长的追求
  • vue实现全屏screenfull-封装组件
  • 【尝鲜】SpringCloudAlibaba AI 配置使用教程
  • docker封禁对外端口映射
  • xcode报错合集,你都遇到过哪些跳不过的坑
  • 【C++ 11 新特性】lambda 表达式详解
  • 【后端】websocket学习笔记
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • docker python 配置
  • storm drpc实例
  • v-if和v-for连用出现的问题
  • 基于游标的分页接口实现
  • 深度解析利用ES6进行Promise封装总结
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • ​iOS安全加固方法及实现
  • ​MySQL主从复制一致性检测
  • ​香农与信息论三大定律
  • %check_box% in rails :coditions={:has_many , :through}
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (9)目标检测_SSD的原理
  • (day6) 319. 灯泡开关
  • (windows2012共享文件夹和防火墙设置
  • (安卓)跳转应用市场APP详情页的方式
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (第一天)包装对象、作用域、创建对象
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (十)c52学习之旅-定时器实验
  • (十七)、Mac 安装k8s
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .net 程序发生了一个不可捕获的异常
  • .net 流——流的类型体系简单介绍
  • .NET 中创建支持集合初始化器的类型
  • .Net插件开发开源框架
  • .net分布式压力测试工具(Beetle.DT)
  • .vimrc php,修改home目录下的.vimrc文件,vim配置php高亮显示
  • 。Net下Windows服务程序开发疑惑
  • /etc/shadow字段详解
  • ??在JSP中,java和JavaScript如何交互?
  • @Async 异步注解使用
  • @ohos.systemParameterEnhance系统参数接口调用:控制设备硬件(执行shell命令方式)
  • [ 物联网 ]拟合模型解决传感器数据获取中数据与实际值的误差的补偿方法
  • [000-01-011].第2节:持久层方案的对比
  • [2010-8-30]