Skip to content

Commit c65ee9c

Browse files
add a solution for 735
1 parent d13551c commit c65ee9c

File tree

2 files changed

+54
-9
lines changed
  • src
    • main/java/com/fishercoder/solutions/firstthousand
    • test/java/com/fishercoder/firstthousand

2 files changed

+54
-9
lines changed

Diff for: src/main/java/com/fishercoder/solutions/firstthousand/_735.java

+34
Original file line numberDiff line numberDiff line change
@@ -120,4 +120,38 @@ public int[] asteroidCollision(int[] asteroids) {
120120
return ans;
121121
}
122122
}
123+
124+
public static class Solution4 {
125+
/**
126+
* My completely original solution on 7/19/2024.
127+
*/
128+
public int[] asteroidCollision(int[] asteroids) {
129+
Deque<Integer> stack = new LinkedList<>();
130+
for (int asteroid : asteroids) {
131+
if (asteroid < 0 && !stack.isEmpty() && stack.peekLast() > 0) {
132+
boolean bothRemoved = false;
133+
while (!stack.isEmpty() && stack.peekLast() > 0 && stack.peekLast() <= -asteroid) {
134+
if (stack.peekLast() == -asteroid) {
135+
bothRemoved = true;
136+
stack.pollLast();
137+
break;
138+
} else if (stack.peekLast() < -asteroid) {
139+
stack.pollLast();
140+
}
141+
}
142+
if ((stack.isEmpty() || stack.peekLast() < 0) && !bothRemoved) {
143+
stack.addLast(asteroid);
144+
}
145+
} else {
146+
stack.addLast(asteroid);
147+
}
148+
}
149+
int[] result = new int[stack.size()];
150+
int i = 0;
151+
while (!stack.isEmpty()) {
152+
result[i++] = stack.pollFirst();
153+
}
154+
return result;
155+
}
156+
}
123157
}

Diff for: src/test/java/com/fishercoder/firstthousand/_735Test.java

+20-9
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,25 @@
11
package com.fishercoder.firstthousand;
22

33
import com.fishercoder.solutions.firstthousand._735;
4-
import org.junit.BeforeClass;
5-
import org.junit.Test;
4+
import org.junit.jupiter.api.BeforeEach;
5+
import org.junit.jupiter.api.Test;
66

7-
import static org.junit.Assert.assertArrayEquals;
7+
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
88

99
public class _735Test {
1010
private static _735.Solution1 solution1;
1111
private static _735.Solution2 solution2;
1212
private static _735.Solution3 solution3;
13+
private static _735.Solution4 solution4;
1314
private static int[] asteroids;
1415
private static int[] expected;
1516

16-
@BeforeClass
17-
public static void setup() {
17+
@BeforeEach
18+
public void setup() {
1819
solution1 = new _735.Solution1();
1920
solution2 = new _735.Solution2();
2021
solution3 = new _735.Solution3();
22+
solution4 = new _735.Solution4();
2123
}
2224

2325
@Test
@@ -27,34 +29,43 @@ public void test1() {
2729
assertArrayEquals(expected, solution1.asteroidCollision(asteroids));
2830
assertArrayEquals(expected, solution2.asteroidCollision(asteroids));
2931
assertArrayEquals(expected, solution3.asteroidCollision(asteroids));
32+
assertArrayEquals(expected, solution4.asteroidCollision(asteroids));
3033
}
3134

3235
@Test
3336
public void test2() {
3437
asteroids = new int[]{8, -8};
3538
asteroids = solution1.asteroidCollision(asteroids);
36-
assertArrayEquals(new int[]{}, asteroids);
39+
expected = new int[]{};
40+
assertArrayEquals(expected, asteroids);
41+
assertArrayEquals(expected, solution4.asteroidCollision(asteroids));
3742
}
3843

3944
@Test
4045
public void test3() {
4146
asteroids = new int[]{10, 2, -5};
4247
asteroids = solution1.asteroidCollision(asteroids);
43-
assertArrayEquals(new int[]{10}, asteroids);
48+
expected = new int[]{10};
49+
assertArrayEquals(expected, asteroids);
50+
assertArrayEquals(expected, solution4.asteroidCollision(asteroids));
4451
}
4552

4653
@Test
4754
public void test4() {
4855
asteroids = new int[]{-2, 1, 2, -2};
4956
asteroids = solution1.asteroidCollision(asteroids);
50-
assertArrayEquals(new int[]{-2, 1}, asteroids);
57+
expected = new int[]{-2, 1};
58+
assertArrayEquals(expected, asteroids);
59+
assertArrayEquals(expected, solution4.asteroidCollision(asteroids));
5160
}
5261

5362
@Test
5463
public void test5() {
5564
asteroids = new int[]{-2, -2, -2, 1};
5665
asteroids = solution1.asteroidCollision(asteroids);
57-
assertArrayEquals(new int[]{-2, -2, -2, 1}, asteroids);
66+
expected = new int[]{-2, -2, -2, 1};
67+
assertArrayEquals(expected, asteroids);
68+
assertArrayEquals(expected, solution4.asteroidCollision(asteroids));
5869
}
5970

6071
@Test

0 commit comments

Comments
 (0)