Re: [閒聊] 每日leetcode已回收
※ 引述 《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 489 之 1553 篇):