Re: [閒聊] 每日leetcode已回收

看板Marginalman作者 (是oin的說)時間1年前 (2024/07/13 13:41), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串489/1553 (看更多)
※ 引述 《Rushia (早瀬ユウカの体操服)》 之銘言: :   : https://leetcode.com/problems/robot-collisions/ : 2751. Robot Collisions : 給你三個長度一樣的陣列positions, healths, directions,分別表示機器人的座標、 : 生命、行走方向,機器人同時開始行走,如果不同方向的機器人碰到了,分成兩情況: : 1.其中一個機器人生命較高,生命較低的機器人hp變0,生命較高的機器人生命減一 : 2.機器人生命一樣,兩個hp一起變0 : 返回剩餘hp大於0的機器人生命值陣列,並且按照原始輸入的順序。 :   思路 : 照著敘述用stack做 比較麻煩的就是要自己用一個struct 這樣比較簡潔 然後這題又有一些小雞巴要求 需要排序 所以我就用了匿名函數 ```cpp class Solution { public: typedef struct robot { int pos; int hp; int dir; int num; }robot; vector<int> survivedRobotsHealths(vector<int>& positions, vector<int>& healt hs, string directions) { int len = positions.size(); vector<robot> save; for(int i = 0 ; i < len ; i ++) { robot n; n.pos=positions[i]; n.hp=healths[i]; n.dir = directions[i]=='R'? 1:-1; n.num=i; save.push_back(n); } sort(save.begin(),save.end(),[](robot &a , robot &b){return a.pos<b.pos; }); vector<robot> paper; for(robot n : save) { paper.push_back(n); while(paper.size()>1 && paper[paper.size()-2].dir==1 && paper[paper. size()-1].dir==-1) { if(paper[paper.size()-2].hp > paper[paper.size()-1].hp) { paper[paper.size()-2].hp--; paper.pop_back(); } else if(paper[paper.size()-2].hp < paper[paper.size()-1].hp) { robot n = paper[paper.size()-1]; paper.pop_back(); paper.pop_back(); paper.push_back(n); paper[paper.size()-1].hp--; } else { paper.pop_back(); paper.pop_back(); } } } vector<int> res; sort(paper.begin(),paper.end(),[](robot &a , robot &b){return a.num<b.nu m;}); for(robot k : paper) { res.push_back(k.hp); } return res; } }; ``` -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.162.13.212 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1720849304.A.6B5.html
文章代碼(AID): #1caXEOQr (Marginalman)
討論串 (同標題文章)
文章代碼(AID): #1caXEOQr (Marginalman)