Skip to content
This repository was archived by the owner on Aug 13, 2024. It is now read-only.

Commit 4a69250

Browse files
committed
EqualStacks algorithm
1 parent c9c20f5 commit 4a69250

File tree

2 files changed

+134
-0
lines changed

2 files changed

+134
-0
lines changed

src/main/java/EqualStacks.java

+104
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
/**
2+
* @author medany
3+
*/
4+
5+
public class EqualStacks {
6+
7+
public int solve(int[] s1, int[] s2, int[] s3) {
8+
9+
int result = 0;
10+
11+
s1 = reverse(s1);
12+
s2 = reverse(s2);
13+
s3 = reverse(s3);
14+
15+
s1 = sumAll(s1);
16+
s2 = sumAll(s2);
17+
s3 = sumAll(s3);
18+
19+
s1 = reverse(s1);
20+
s2 = reverse(s2);
21+
s3 = reverse(s3);
22+
23+
result = findFirstCommon(s1, s2, s3);
24+
25+
return result;
26+
}
27+
28+
private int[] reverse(int[] arr) {
29+
int[] reversed = new int[arr.length];
30+
for (int i = 0; i < arr.length; i++) {
31+
reversed[i] = arr[(arr.length - 1) - i];
32+
}
33+
34+
return reversed;
35+
}
36+
37+
// return a new array out of an existing array with each element is sum of all
38+
// the previous elements
39+
private int[] sumAll(int[] arr) {
40+
int[] result = new int[arr.length];
41+
int sum = 0;
42+
for (int i = 0; i < arr.length; i++) {
43+
sum += arr[i];
44+
result[i] = sum;
45+
}
46+
47+
return result;
48+
}
49+
50+
private int findFirstCommon(int[] s1, int[] s2, int s3[]) {
51+
52+
if (s1.length < s2.length && s1.length < s3.length) {
53+
for (int i = 0; i < s1.length; i++) {
54+
for (int j = 0; j < s2.length; j++) {
55+
if (s1[i] == s2[j]) {
56+
for (int k = 0; k < s3.length; k++) {
57+
if (s2[j] == s3[k]) {
58+
return s1[i];
59+
}
60+
}
61+
}
62+
}
63+
}
64+
} else if (s2.length < s1.length && s2.length < s3.length) {
65+
for (int i = 0; i < s2.length; i++) {
66+
for (int j = 0; j < s1.length; j++) {
67+
if (s2[i] == s1[j]) {
68+
for (int k = 0; k < s3.length; k++) {
69+
if (s1[j] == s3[k]) {
70+
return s2[i];
71+
}
72+
}
73+
}
74+
}
75+
}
76+
} else if (s3.length < s1.length && s3.length < s2.length) {
77+
for (int i = 0; i < s3.length; i++) {
78+
for (int j = 0; j < s1.length; j++) {
79+
if (s3[i] == s1[j]) {
80+
for (int k = 0; k < s2.length; k++) {
81+
if (s1[j] == s2[k]) {
82+
return s3[i];
83+
}
84+
}
85+
}
86+
}
87+
}
88+
} else if (s1.length == s2.length && s2.length == s3.length) {
89+
for (int i = 0; i < s1.length; i++) {
90+
for (int j = 0; j < s2.length; j++) {
91+
if (s1[i] == s2[j]) {
92+
for (int k = 0; k < s3.length; k++) {
93+
if (s2[j] == s3[k]) {
94+
return s1[i];
95+
}
96+
}
97+
}
98+
}
99+
}
100+
}
101+
102+
return 0;
103+
}
104+
}

test/main/java/EqualStacksTest.java

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import org.junit.Assert;
2+
import org.junit.Test;
3+
4+
/**
5+
* @author medany
6+
*/
7+
8+
public class EqualStacksTest {
9+
10+
private EqualStacks alg = new EqualStacks();
11+
int actual, expected;
12+
13+
@Test
14+
public void Test_1() {
15+
16+
actual = alg.solve(new int[] { 3, 2, 1, 1, 1 }, new int[] { 4, 3, 2 }, new int[] { 1, 1, 4, 1 });
17+
expected = 5;
18+
19+
Assert.assertEquals(expected, actual);
20+
}
21+
22+
@Test
23+
public void Test_2() {
24+
25+
actual = alg.solve(new int[] { 1 }, new int[] { 1 }, new int[] { 1 });
26+
expected = 1;
27+
28+
Assert.assertEquals(expected, actual);
29+
}
30+
}

0 commit comments

Comments
 (0)