文章目录

  • 1. 比赛结果
  • 2. 题目解析
    • 2.1 猜数字 Easy
    • 2.2 分式化简 Esay
    • 2.3 机器人大冒险 Medium
    • 2.4 覆盖 Hard
    • 2.5 发 LeetCoin Hard

1. 比赛结果

2019.9.24晚,第一次参加线上比赛
比赛排名结果:582/1541,做出了2道题。。。

我证明了:我不是最菜的!!!

2. 题目解析


2.1 猜数字 Easy

小A 和 小B 在玩猜数字。小B 每次从 1, 2, 3 中随机选择一个,小A 每次也从 1, 2, 3 中选择一个猜。他们一共进行三次这个游戏,请返回 小A 猜对了几次?

输入的guess数组为 小A 每次的猜测,answer数组为 小B 每次的选择。guess和answer的长度都等于3。

示例 1:
输入:guess = [1,2,3], answer = [1,2,3]
输出:3
解释:小A 每次都猜对了。示例 2:
输入:guess = [2,2,3], answer = [3,2,1]
输出:1
解释:小A 只猜对了第二次。
限制:
guess的长度 = 3
answer的长度 = 3
guess的元素取值为 {1, 2, 3} 之一。
answer的元素取值为 {1, 2, 3} 之一。

送分题目,不解释,只是一开始觉得这么简单,会不会坑我

class Solution {public:int game(vector<int>& guess, vector<int>& answer) {int count = 0;for(int i = 0; i < 3; ++i){if(guess[i] == answer[i])++count;}return count;}
};

2.2 分式化简 Esay

有一个同学在学习分式。他需要将一个连分数化成最简分数,你能帮助他吗?

连分数是形如上图的分式。在本题中,所有系数都是大于等于0的整数。

输入的cont代表连分数的系数(cont[0]代表上图的a0,以此类推)。返回一个长度为2的数组[n, m],使得连分数的值等于n / m,且n, m最大公约数为1。

示例 1:
输入:cont = [3, 2, 0, 2]
输出:[13, 4]
解释:原连分数等价于3 + (1 / (2 + (1 / (0 + 1 / 2))))。注意[26, 8], [-13, -4]都不是正确答案。示例 2:
输入:cont = [0, 0, 3]
输出:[3, 1]
解释:如果答案是整数,令分母为1即可。限制:
cont[i] >= 0
1 <= cont的长度 <= 10
cont最后一个元素不等于0
答案的n, m的取值都能被32位int整型存下(即不超过2 ^ 31 - 1)。

  • 数学递推公式推导
  • 用up表示初始分子(1),down表示初始分母(最后一个系数)
  • 递推公式 up=down∗ai+upup = down * a_i+upup=down∗ai​+up
  • 然后颠倒分子分母
class Solution {public:vector<int> fraction(vector<int>& cont) {int up = 1, down = cont.back(), i;for(i = cont.size() - 1; i >= 1; --i){up = down*cont[i-1]+up;swap(up, down);}return {down, up};}
};

2.3 机器人大冒险 Medium

力扣团队买了一个可编程机器人,机器人初始位置在原点(0, 0)。小伙伴事先给机器人输入一串指令command,机器人就会无限循环这条指令的步骤进行移动。指令有两种:

U: 向y轴正方向移动一格
R: 向x轴正方向移动一格。
不幸的是,在 xy 平面上还有一些障碍物,他们的坐标用obstacles表示。机器人一旦碰到障碍物就会被损毁。

给定终点坐标(x, y),返回机器人能否完好地到达终点。如果能,返回true;否则返回false。

示例 1:
输入:command = "URR", obstacles = [], x = 3, y = 2
输出:true
解释:U(0, 1) -> R(1, 1) -> R(2, 1) -> U(2, 2) -> R(3, 2)。示例 2:
输入:command = "URR", obstacles = [[2, 2]], x = 3, y = 2
输出:false
解释:机器人在到达终点前会碰到(2, 2)的障碍物。示例 3:
输入:command = "URR", obstacles = [[4, 2]], x = 3, y = 2
输出:true
解释:到达终点后,再碰到障碍物也不影响返回结果。限制:
2 <= command的长度 <= 1000
command由U,R构成,且至少有一个U,至少有一个R
0 <= x <= 1e9, 0 <= y <= 1e9
0 <= obstacles的长度 <= 1000
obstacles[i]不为原点或者终点

class Solution {// 超时 代码
public:bool robot(string command, vector<vector<int>>& obstacles, int x, int y) {int ax = 0, by = 0;unordered_multimap<int,int> m;for(auto it = obstacles.begin(); it != obstacles.end(); it++){m.insert(make_pair((*it)[0],(*it)[1]));//建立哈希表}for(int i = 0; i < command.size(); i++){if(ax > x || by > y)break;//走过了,肯定达到不了终点if(command[i] == 'U')by += 1;elseax += 1;if(ax == x && by == y)return true;//达到终点if(i == command.size()-1)i = -1;//循环执行auto range = m.equal_range(ax);auto it = range.first;while(it != range.second)//查找当前坐标是否是障碍物{if(by == (*it).second)return false;++it;}   }return false;}
};

上面的效率还是有问题,可能不能这么干


正解:

  • 找到一串命令可以走到的位置,存入哈希表
  • 求出多少个循环可以到达终点,把终点移到上面一串指令走过的范围,进行检查
  • 障碍物也是一样处理
class Solution {public:bool robot(string command, vector<vector<int>>& obstacles, int x, int y) {int ax = 0, by = 0, circle, px, py;unordered_map<int,unordered_set<int>> m;m[0].insert(0);for(int i = 0; i < command.size(); i++){if(command[i] == 'U')by += 1;elseax += 1;m[ax].insert(by);//一串指令走过的点}circle = min(x/ax, y/by);//循环次数px = x-ax*circle;py = y-by*circle;if(!m.count(px) || !m[px].count(py))return false;//终点不在路径上for(int i = 0; i < obstacles.size(); ++i){if(obstacles[i][0] > x || obstacles[i][1] > y)continue;//障碍物在终点范围外circle = min(obstacles[i][0]/ax, obstacles[i][1]/by);px = obstacles[i][0]-ax*circle;py = obstacles[i][1]-by*circle;if(m.count(px) && m[px].count(py))return false;//路径包含障碍物}return true;}
};

12 ms 8.4 MB

2.4 覆盖 Hard


2.5 发 LeetCoin Hard

LeetCode 2019 力扣杯全国秋季编程大赛相关推荐

  1. LeetCode 2021 力扣杯全国秋季编程大赛(第384名)

    文章目录 1. 无人机方阵 2. 心算挑战 3. 黑白翻转棋 4. 玩具套圈 5. 十字路口的交通 2021.9.11,周六 比赛之前:早上去交大看看,本科毕业10年了,由于限流,校园里没有多少回校的 ...

  2. LeetCode 2020 力扣杯全国秋季编程大赛(656/3244,前20.2%)

    文章目录 1. 比赛结果 2. 题目 1. LeetCode LCP 17. 速算机器人 easy 2. LeetCode LCP 18. 早餐组合 easy 3. LeetCode LCP 19. ...

  3. LeetCode 2020 力扣杯全国春季编程大赛(1644/4093,前40.2%)

    文章目录 1. 比赛结果 2. 题目解析 2.1 拿硬币 Easy 2.2 传递信息 Esay 2.3 剧情触发时间 Medium 2.4 最小跳跃次数 Hard 2.5 二叉树任务调度 Hard 1 ...

  4. LCCUP 力扣杯2020秋季编程大赛题解

    目录 1. 速算机器人 2. 早餐组合 3. 秋叶收藏集 4. 快速公交 5. 追逐游戏 1. 速算机器人 小扣在秋日市集发现了一款速算机器人.店家对机器人说出两个数字(记作 x 和 y),请小扣说出 ...

  5. 力扣杯2021秋季编程大赛第四题 LCP 42. 玩具套圈

    原题链接:LCP 42. 玩具套圈 思路 记toy的坐标xt, yt, 半径t ring的坐标xr, yr 满足条件的toy (xt - xr)^2 + (yt - yr)^2 <= (t - ...

  6. 【LCCUP 力扣杯 2023春季编程大赛】1. 补给马车

    题目描述: 远征队即将开启未知的冒险之旅,不过在此之前,将对补给车队进行最后的检查.supplies[i] 表示编号为 i 的补给马车装载的物资数量. 考虑到车队过长容易被野兽偷袭,他们决定将车队的长 ...

  7. 【算法比赛】2020 力扣杯!Code Your Future 春季全国编程大赛

    这个比赛,除了最后一题,其他四题其实没啥难度. 第一题:模拟. 第二题:BFS 或者 DP. 第三题:二分. 第四题:BFS. 第五题:思维 + 树的 DFS. 详细题解如下. 1.拿硬币 AC代码( ...

  8. LeetCode 1244. 力扣排行榜(map+multiset)

    文章目录 1. 题目 2. 解题 1. 题目 新一轮的「力扣杯」编程大赛即将启动,为了动态显示参赛者的得分数据,需要设计一个排行榜 Leaderboard. 请你帮忙来设计这个 Leaderboard ...

  9. 力扣杯2023春-个人赛、战队赛

    文章目录 力扣杯2023春-个人赛 [LCP 72. 补给马车](https://leetcode.cn/problems/hqCnmP/) 模拟 [LCP 73. 探险营地](https://lee ...

最新文章

  1. android 打包提示 Password verification failed
  2. ECSHOP系统纯静态网页的生成
  3. Failed to bind NettyServer on /192.168.**.*:20880, cause: Failed to bind to: /0.0.0.0:20880
  4. SQL数据库。按年,月,日查询
  5. Matlab查看数组大小的命令——size、length、numel和ndims
  6. MySQL查询select实例 【笔记】
  7. windows平台下的反调试技术
  8. JAVA进阶教学之(String类的构造方法)
  9. 充分地享受母爱的飞鸽传书
  10. HDFS小文件问题解决方案
  11. 打败 Python、JS、C# 成最受欢迎编程语言,是时候掌握 Rust 了吗?
  12. 告别程序员生涯,一点感慨
  13. 【ubuntu操作系统】ubuntu系统下第一个C语言程序
  14. 操作系统 | 银行家算法
  15. c语言编程一个数的质子求出来,量子力学第一章课外练习题
  16. 论文发表投稿流程的说明
  17. 苹果开发者账号登录的问题
  18. OpenMP: VS2010配置使用OpenMP
  19. torch.zeros_like() 和 torch.zeros()的区别
  20. ESP8266/ESP32 基础篇: 时间同步 SNTP 介绍和使用

热门文章

  1. 十六进制转化为十进制
  2. JAVA多线程实现的三种方式 ()
  3. 简单实用的铁道部12306.cn网站自动化登录
  4. Linux常用工具小结:(2) Mysql的rpm安装和编译安装
  5. vector的内存释放
  6. 打印菱形星号组合C程序
  7. 快学好这个去给学妹修热水器
  8. 二十世纪最伟大的算法,你了解哪个?
  9. vscode 使用 ssh 登录
  10. 嵌入式系统开发者需要掌握什么技术?