Skip to content

Commit 1515deb

Browse files
committed
Add a solution for Leetcode#448.
1 parent 5ccbc1a commit 1515deb

File tree

2 files changed

+62
-0
lines changed

2 files changed

+62
-0
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package org.sean.array;
2+
3+
import java.util.Collections;
4+
import java.util.LinkedList;
5+
import java.util.List;
6+
7+
/**
8+
* Created by Sean on 2/24/17.
9+
* <p>
10+
* 448. Find All Numbers Disappeared in an Array
11+
*/
12+
public class ElementFinder {
13+
public List<Integer> findDisappearedNumbers(int[] nums) {
14+
if (nums.length <= 1)
15+
return Collections.EMPTY_LIST;
16+
17+
LinkedList<Integer> result = new LinkedList<Integer>();
18+
int cnt = nums.length;
19+
20+
// used to clear the most left bit if assigned before
21+
int mask = ~(1 << 31);
22+
23+
// 4, 3, 2, 7, 8, 2, 3, 1
24+
for (int i = 0; i < cnt; i++) {
25+
int pos = (nums[i] & mask) - 1;
26+
nums[pos] = (1 << 31) | nums[pos];// mark the value
27+
}
28+
29+
for (int k = 1; k <= cnt; k++) {
30+
int v = nums[k - 1];
31+
byte s = (byte) (v >> 31);
32+
if ((s & 0x01) == 0) {
33+
result.add(k);
34+
}
35+
}
36+
37+
return result;
38+
}
39+
}

src/test/java/ElementFinderTest.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import org.junit.Assert;
2+
import org.junit.Test;
3+
import org.sean.array.ElementFinder;
4+
5+
import java.util.Arrays;
6+
import java.util.List;
7+
8+
/**
9+
* Created by Sean on 2/24/17.
10+
*/
11+
public class ElementFinderTest {
12+
@Test
13+
public void testMissingNums() {
14+
ElementFinder finder = new ElementFinder();
15+
16+
int[] all = {4, 3, 2, 7, 8, 2, 3, 1};
17+
List<Integer> result = finder.findDisappearedNumbers(all);
18+
19+
Integer[] array = result.toArray(new Integer[result.size()]);
20+
System.out.printf(Arrays.toString(array));
21+
Assert.assertArrayEquals(new Integer[]{5, 6}, array);
22+
}
23+
}

0 commit comments

Comments
 (0)