Tasks Details
easy
1.
Distinct
Compute number of distinct values in an array.
Task Score
100%
Correctness
100%
Performance
100%
Write a function
object Solution { def solution(a: Array[Int]): Int }
that, given an array A consisting of N integers, returns the number of distinct values in array A.
For example, given array A consisting of six elements such that:
A[0] = 2 A[1] = 1 A[2] = 1 A[3] = 2 A[4] = 3 A[5] = 1the function should return 3, because there are 3 distinct values appearing in array A, namely 1, 2 and 3.
Write an efficient algorithm for the following assumptions:
- N is an integer within the range [0..100,000];
- each element of array A is an integer within the range [−1,000,000..1,000,000].
Copyright 2009–2025 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.
Solution
Programming language used Scala
Time spent on task 4 minutes
Notes
not defined yet
Task timeline
Code: 19:30:47 UTC,
scala,
verify,
result: Failed
import scala.collection.JavaConversions._
// you can use println for debugging purposes, e.g.
// println("this is a debug message")
object Solution {
def solution(A: Array[Int]): Int = {
scala.util.Sorting.quicksort(A)
@scala.annotation.tailrec
def go(idx: Int, prev: Option[Int], count: Int): Int = {
if (idx >= A.length) count
else {
val current = A(idx)
val nextCount =
if (prev map (_ == current) getOrElse false) count
else count + 1
go(idx + 1, Some(current), nextCount)
}
}
go(0, None, 0)
}
}
Analysis
Compile error
Solution.scala:8: error: value quicksort is not a member of object scala.util.Sorting scala.util.Sorting.quicksort(A) ^ one error found
Code: 19:31:00 UTC,
scala,
verify,
result: Passed
import scala.collection.JavaConversions._
// you can use println for debugging purposes, e.g.
// println("this is a debug message")
object Solution {
def solution(A: Array[Int]): Int = {
scala.util.Sorting.quickSort(A)
@scala.annotation.tailrec
def go(idx: Int, prev: Option[Int], count: Int): Int = {
if (idx >= A.length) count
else {
val current = A(idx)
val nextCount =
if (prev map (_ == current) getOrElse false) count
else count + 1
go(idx + 1, Some(current), nextCount)
}
}
go(0, None, 0)
}
}
Analysis
Code: 19:31:15 UTC,
scala,
verify,
result: Passed
import scala.collection.JavaConversions._
// you can use println for debugging purposes, e.g.
// println("this is a debug message")
object Solution {
def solution(A: Array[Int]): Int = {
scala.util.Sorting.quickSort(A)
@scala.annotation.tailrec
def go(idx: Int, prev: Option[Int], count: Int): Int = {
if (idx >= A.length) count
else {
val current = A(idx)
val nextCount =
if (prev map (_ == current) getOrElse false) count
else count + 1
go(idx + 1, Some(current), nextCount)
}
}
go(0, None, 0)
}
}
Analysis
Code: 19:31:27 UTC,
scala,
final,
score: 
100
import scala.collection.JavaConversions._
// you can use println for debugging purposes, e.g.
// println("this is a debug message")
object Solution {
def solution(A: Array[Int]): Int = {
scala.util.Sorting.quickSort(A)
@scala.annotation.tailrec
def go(idx: Int, prev: Option[Int], count: Int): Int = {
if (idx >= A.length) count
else {
val current = A(idx)
val nextCount =
if (prev map (_ == current) getOrElse false) count
else count + 1
go(idx + 1, Some(current), nextCount)
}
}
go(0, None, 0)
}
}
Analysis summary
The solution obtained perfect score.
Analysis
Detected time complexity:
O(N*log(N)) or O(N)
expand all
Correctness tests
1.
1.786 s
OK
1.
2.138 s
OK
2.
2.248 s
OK
1.
2.272 s
OK
1.
2.260 s
OK
1.
2.267 s
OK
1.
2.286 s
OK
1.
2.258 s
OK
1.
2.277 s
OK
1.
2.283 s
OK