LeetCode 2019 力扣杯全国秋季编程大赛
文章目錄
- 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
- 然后顛倒分子分母
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;} };
上面的效率還是有問題,可能不能這么干
正解:
- 找到一串命令可以走到的位置,存入哈希表
- 求出多少個循環可以到達終點,把終點移到上面一串指令走過的范圍,進行檢查
- 障礙物也是一樣處理
12 ms 8.4 MB
2.4 覆蓋 Hard
2.5 發 LeetCoin Hard
總結
以上是生活随笔為你收集整理的LeetCode 2019 力扣杯全国秋季编程大赛的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 445. 两数相加 I
- 下一篇: LeetCode 1262. 可被三整除