日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 2019 力扣杯全国秋季编程大赛

發布時間:2024/7/5 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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
  • 然后顛倒分子分母
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 力扣杯全国秋季编程大赛的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。