Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 7a518c9

Browse files
add 649
1 parent f97c1e0 commit 7a518c9

File tree

3 files changed

+129
-0
lines changed

3 files changed

+129
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ Your ideas/fixes/algorithms are more than welcome!
2323
|652|[Find Duplicate Subtrees](https://leetcode.com/problems/find-duplicate-subtrees/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_652.java) | O(n) |O(n) | Medium | Tree
2424
|651|[4 Keys Keyboard](https://leetcode.com/problems/4-keys-keyboard/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_651.java) | O(n^2) |O(n) | Medium | DP
2525
|650|[2 Keys Keyboard](https://leetcode.com/problems/2-keys-keyboard/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_650.java) | O(n^2) |O(n) | Medium | DP
26+
|649|[Dota2 Senate](https://leetcode.com/problems/dota2-senate/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_649.java) | O(n) |O(n) | Medium | Greedy
2627
|648|[Replace Words](https://leetcode.com/problems/replace-words/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_648.java) | O(n) |O(n) | Medium | Trie
2728
|647|[Palindromic Substrings](https://leetcode.com/problems/palindromic-substrings/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_647.java) | O(n^2) |O(1) | Medium | DP
2829
|646|[Maximum Length of Pair Chain](https://leetcode.com/problems/maximum-length-of-pair-chain/)|[Solution](../master/src/main/java/com/fishercoder/solutions/_646.java) | O(nlogn) |O(1) | Medium | DP
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package com.fishercoder.solutions;
2+
3+
import java.util.LinkedList;
4+
import java.util.Queue;
5+
6+
/**
7+
* 649. Dota2 Senate
8+
*
9+
* In the world of Dota2, there are two parties: the Radiant and the Dire.
10+
11+
The Dota2 senate consists of senators coming from two parties.
12+
Now the senate wants to make a decision about a change in the Dota2 game.
13+
The voting for this change is a round-based procedure.
14+
In each round, each senator can exercise one of the two rights:
15+
16+
1. Ban one senator's right:
17+
A senator can make another senator lose all his rights in this and all the following rounds.
18+
2. Announce the victory:
19+
If this senator found the senators who still have rights to vote are all from the same party,
20+
he can announce the victory and make the decision about the change in the game.
21+
Given a string representing each senator's party belonging.
22+
The character 'R' and 'D' represent the Radiant party and the Dire party respectively.
23+
Then if there are n senators, the size of the given string will be n.
24+
25+
The round-based procedure starts from the first senator to the last senator in the given order.
26+
This procedure will last until the end of voting.
27+
All the senators who have lost their rights will be skipped during the procedure.
28+
29+
Suppose every senator is smart enough and will play the best strategy for his own party,
30+
you need to predict which party will finally announce the victory and make the change in the Dota2 game.
31+
The output should be Radiant or Dire.
32+
33+
Example 1:
34+
Input: "RD"
35+
Output: "Radiant"
36+
Explanation: The first senator comes from Radiant and he can just ban the next senator's right in the round 1.
37+
And the second senator can't exercise any rights any more since his right has been banned.
38+
And in the round 2, the first senator can just announce the victory since he is the only guy in the senate who can vote.
39+
40+
Example 2:
41+
Input: "RDD"
42+
Output: "Dire"
43+
Explanation:
44+
The first senator comes from Radiant and he can just ban the next senator's right in the round 1.
45+
And the second senator can't exercise any rights anymore since his right has been banned.
46+
And the third senator comes from Dire and he can ban the first senator's right in the round 1.
47+
And in the round 2, the third senator can just announce the victory since he is the only guy in the senate who can vote.
48+
Note:
49+
The length of the given string will in the range [1, 10,000].
50+
51+
*/
52+
public class _649 {
53+
54+
public String predictPartyVictory(String senate) {
55+
Queue<Integer> radiantQ = new LinkedList<>();
56+
Queue<Integer> direQ = new LinkedList<>();
57+
int len = senate.length();
58+
for (int i = 0; i < len; i++) {
59+
if (senate.charAt(i) == 'R') radiantQ.offer(i);
60+
else direQ.offer(i);
61+
}
62+
while (!radiantQ.isEmpty() && !direQ.isEmpty()) {
63+
int radiantIndex = radiantQ.poll();
64+
int direIndex = direQ.poll();
65+
if (radiantIndex < direIndex) {
66+
/**Radiant will ban Dire in this case, so we'll add radiant index back to the queue plus n*/
67+
radiantQ.offer(radiantIndex + len);
68+
} else {
69+
direQ.offer(direIndex + len);
70+
}
71+
}
72+
return radiantQ.isEmpty() ? "Dire" : "Radiant";
73+
}
74+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package com.fishercoder;
2+
3+
import com.fishercoder.solutions._649;
4+
import org.junit.BeforeClass;
5+
import org.junit.Test;
6+
7+
import static org.junit.Assert.assertEquals;
8+
9+
/**
10+
* Created by fishercoder on 5/8/17.
11+
*/
12+
public class _649Test {
13+
private static _649 test;
14+
15+
@BeforeClass
16+
public static void setup(){
17+
test = new _649();
18+
}
19+
20+
@Test
21+
public void test1(){
22+
assertEquals("Dire", test.predictPartyVictory("RDDDR"));
23+
}
24+
25+
@Test
26+
public void test2(){
27+
assertEquals("Radiant", test.predictPartyVictory("RD"));
28+
}
29+
30+
@Test
31+
public void test3(){
32+
assertEquals("Dire", test.predictPartyVictory("RDD"));
33+
}
34+
35+
@Test
36+
public void test4(){
37+
assertEquals("Radiant", test.predictPartyVictory("RDDR"));
38+
}
39+
40+
@Test
41+
public void test5(){
42+
assertEquals("Dire", test.predictPartyVictory("RDDRD"));
43+
}
44+
45+
@Test
46+
public void test6(){
47+
assertEquals("Dire", test.predictPartyVictory("RDDDDDRR"));
48+
}
49+
50+
@Test
51+
public void test7(){
52+
assertEquals("Dire", test.predictPartyVictory("RDDDDRR"));
53+
}
54+
}

0 commit comments

Comments
 (0)