# PermMissingElem – Codility – Solution

Java solution to Codility PermMissingElem (Permutation Missing Element) problem (Lesson 3 – Time Complexity) which scored 100%. The problem is to find the missing element in a given permutation. The main strategy is use a HashSet to store elements which will also order them. Then check all values from 1 to max to see if it’s missing from HashSet.

```1234567891011121314151617181920212223package com.codility.lesson03.timecomplexity;

import java.util.HashSet;
import java.util.Set;

public class PermutationMissingElement {
public int solution(int[] A) {
int max = A.length + 1;

//load array elements into array so would be quick to check if elements exist
Set incompleteSet = new HashSet();
for(int i=0; i<A.length; i++) {
}

for(int i=1; i<max+1; i++) {
if(!incompleteSet.contains(i)) {
return (i);
}
}
throw new RuntimeException("shouldn't reach here");
}
}

```

TestNG test cases for this problem which all passed:

```12345678910111213141516171819202122232425262728293031323334353637package test.com.codility.lesson03.timecomplexity;

import org.testng.Assert;
import org.testng.annotations.*;

import com.codility.lesson03.timecomplexity.PermutationMissingElement;

public class PermutationMissingElementTests {
private PermutationMissingElement solution;

@BeforeTest
public void setUp() {
solution = new PermutationMissingElement();
}

@DataProvider(name = "test1")
public Object [][] createData1() {
return new Object [][] {
new Object [] { new int [] {                        }, 1 },
new Object [] { new int [] {                      1 }, 2 },
new Object [] { new int [] {                      2 }, 1 },
new Object [] { new int [] {                   1, 3 }, 2 },
new Object [] { new int [] {                   2, 3 }, 1 },
new Object [] { new int [] {                1, 2    }, 3 },
new Object [] { new int [] {                1, 3, 4 }, 2 },
new Object [] { new int [] {                2, 4, 3 }, 1 },
new Object [] { new int [] {             2, 3, 1, 5 }, 4 },
new Object [] { new int [] { 4, 2, 3, 1, 5, 6, 8, 9 }, 7 },
new Object [] { new int [] { 4, 2, 3, 1, 5, 6, 8, 7 }, 9 },
};
}

@Test(dataProvider = "test1")
public void verifySolution(int [] pA, int pExpectedMissingValue) {
Assert.assertEquals(solution.solution(pA), pExpectedMissingValue);
}
}

```