题目描述
Dota2 的世界里有两个阵营:Radiant(天辉)和 Dire(夜魇)
Dota2 参议院由来自两派的参议员组成。现在参议院希望对一个 Dota2 游戏里的改变作出决定。他们以一个基于轮为过程的投票进行。在每一轮中,每一位参议员都可以行使两项权利中的一项:
禁止一名参议员的权利:
参议员可以让另一位参议员在这一轮和随后的几轮中丧失所有的权利。
宣布胜利:
如果参议员发现有权利投票的参议员都是同一个阵营的,他可以宣布胜利并决定在游戏中的有关变化。
示例 :
输入: “RRDDD”
输出: “Radiant”
总结
SC1的band和banr判断当前这个有没有被ban了,被ban了就处理band和banr,然后跳过,然后在最后来一次大判断(最外层是一个while(true) ),也是暴力美学。
SC2真的思路清奇,暴力美学,把投票的过程模拟出来,但比较抽象
EC题目意思理解错了,但可以看下(看不懂了~~)
Sample Code
class Solution {
public String predictPartyVictory(String senate) {
int band=0,banr=0;
char[] ss=senate.toCharArray();
while(true){
for(int i=0;i<senate.length();i++){
if(ss[i]=='R'){
if(banr==0) band++;
else {
ss[i]='B';
banr--;
}
}else if(ss[i]=='D'){
if(band==0) banr++;
else {
ss[i]='B';
band--;
}
}
}
boolean flag1=false,flag2=false;
for(int i=0;i<ss.length;i++){
if(ss[i]=='R')
flag1=true;
if(ss[i]=='D')
flag2=true;
}
if(flag1==false)
return "Dire";
if(flag2==false)
return "Radiant";
}
}
}
Sample Code 2
class Solution {
public String predictPartyVictory(String senate) {
LinkedList<Integer> r = new LinkedList<Integer>();
LinkedList<Integer> d = new LinkedList<Integer>();
for (int i = 0; i < senate.length(); ++i) {
if (senate.charAt(i) == 'R') r.add(i);
else d.add(i);
}
while (r.size() > 0 && d.size() > 0) {
int x = r.poll();
int y = d.poll();
if (x < y) r.add(x + senate.length());
else d.add(y + senate.length());
}
if (r.size() > 0) return "Radiant";
else return "Dire";
}
}
ERROR Code
class Solution {
public String predictPartyVictory(String senate) {
int[] list = new int[senate.length()];
int k = 0;
int len = 1;
char cur = senate.charAt(0);
for(int i = 0; i < senate.length(); i++) {
list[i] = 0;
char c = senate.charAt(i);
if(c != cur) {
cur = cur == 'R' ? 'D' : 'R';
k++;
len++;
}
list[k] += 1;
}
// for(int i : list) System.out.println(i);
// System.out.println(len);
k = 0;
int index = 0;
int alive = 0;
for(int i = 0; i < len-1; i++) {
list[i] += alive;
if(list[i] >= list[i+1]) {
alive = list[i] - list[i+1];
list[i+1] = 0;
index = i;
}else {
list[i+1] -= list[i];
index = i+1;
}
}
String a = senate.charAt(0) == 'R' ? "Radiant" : "Dire";
String b = a.equals("Radiant") ? "Dire" : "Radiant";
System.out.println(index);
if(index == 0 || index % 2 == 0) return a;
else return b;
}
}