Distinct – Codility – Solution

Java solution to Codility Distinct problem (Lesson 6 – Sorting) which scored 100%. The problem is to count the number of distinct values in an array. The strategy is to use a java.util.Set to store only distinct elements and then get the size of the set.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package com.codility.lesson06.sorting;

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

public class Distinct {
  public int solution(int[] A) {
    if(A.length == 0) return 0;

    Set aSet = new HashSet();
    for(int i=0; i<A.length; i++) {
      aSet.add(A[i]);
    }
    return aSet.size();
  }
}

TestNG test cases for this problem which all passed:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package test.com.codility.lesson06.sorting;

import org.testng.Assert;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

import com.codility.lesson06.sorting.Distinct;

public class DistinctTests {
  private Distinct solution;
 
  @BeforeTest
  public void setUp() {
    solution = new Distinct();
  }

  @DataProvider(name = "test1")
  public Object [][] createData1() {
    return new Object [][] {
      new Object [] {  new int [] { 2, 1, 1, 2, 3, 1  }, 3 }, //1, 2, 3
      new Object [] {  new int [] { -3, 1, -100, -2, -2, 5, 6  }, 6 }, //-100, -3, -2, 1, 5, 6
      new Object [] {  new int [] { -3, 1, -100}, 3}, //-100, -3, 1
      new Object [] {  new int [] { 0, 0, 0, 0}, 1}, //0
      new Object [] {  new int [] { 0, -1, 0, -1}, 2}, //-1, 0
      new Object [] {  new int [] { 10 }, 1 }, //10
      new Object [] {  new int [] { }, 0 },
    };
  }

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