Skip to main content

Distinct: Compute number of distinct values in an array.

Task description
Write a function
class Solution { public int solution(int[] A); }
that, given a zero-indexed array A consisting of N integers, returns the number of distinct values in array A.
Assume that:
  • 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].
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.
Complexity:
  • expected worst-case time complexity is O(N*log(N));
  • expected worst-case space complexity is O(N), beyond input storage (not counting the storage required for input arguments).
Elements of input arrays can be modified.


class Solution { public int solution(int[] A) { // write your code in Java SE 8 int len=A.length; int count=1; int tmp=0; for(int i=0;i<len;i++){ for(int j=i+1;j<len;j++){ if(A[i]>A[j]){ tmp=A[i]; A[i]=A[j]; A[j]=tmp; } } } for(int i=0;i<len-1;i++){ if(A[i]!=A[i+1])count++; } if(len==0) count=0; return count; } }

75%                                                       75 out of 100 points



Analysis summary
The following issues have been detected: timeout errors.
Analysis
Detected time complexity:
O(N**2)

expand allExample tests
example1 
example test, positive answer
OK
expand allCorrectness tests
extreme_empty 
empty sequence
OK
extreme_single 
sequence of one element
OK
extreme_two_elems 
sequence of three distinct elements
OK
extreme_one_value 
sequence of 10 equal elements
OK
extreme_negative 
sequence of negative elements, length=5
OK
extreme_big_values 
sequence with big values, length=5
OK
medium1 
chaotic sequence of value sfrom [0..1K], length=100
OK
medium2 
chaotic sequence of value sfrom [0..1K], length=200
OK
medium3 
chaotic sequence of values from [0..10], length=200
OK
expand allPerformance tests
large1 
chaotic sequence of values from [0..100K], length=10K
TIMEOUT ERROR 
running time: 2.67 sec., time limit: 2.41 sec.
large_random1 
chaotic sequence of values from [-1M..1M], length=100K
TIMEOUT ERROR 
running time: >9.00 sec., time limit: 3.61 sec.
large_random2 
another chaotic sequence of values from [-1M..1M], length=100K
TIMEOUT ERROR 
running time: >9.00 sec., time limit: 3.59 sec.

Comments

  1. I have added a code that got 100 % on codility.

    function solution($A) {
    // write your code in PHP7.0
    $A=array_unique($A);
    return count($A);
    exit(1);
    }
    https://app.codility.com/demo/results/trainingAJVQCH-PRQ/

    ReplyDelete

Post a Comment

Popular posts from this blog

CODILITY: Determine whether given string of parentheses is properly nested.

Task description A string S consisting of N characters is called  properly nested  if: S is empty; S has the form " (U) " where U is a properly nested string; S has the form " VW " where V and W are properly nested strings. For example, string " (()(())()) " is properly nested but string " ()) " isn't. Write a function: class Solution { public int solution(String S); } that, given a string S consisting of N characters, returns 1 if string S is properly nested and 0 otherwise. For example, given S = " (()(())()) ", the function should return 1 and given S = " ()) ", the function should return 0, as explained above. Assume that: N is an integer within the range [ 0 .. 1,000,000 ]; string S consists only of the characters " ( " and/or " ) ". Complexity: expected worst-case time complexity is O(N); expected worst-case space complexity is O(1) (not counting the storage requi...

change directory (cd) function for an abstract file system ( Java Implementation )

Write a function that provides change directory (cd) function for an abstract file system. Notes: Root path is '/'. Path separator is '/'. Parent directory is addressable as "..". Directory names consist only of English alphabet letters (A-Z and a-z). For example, new Path("/a/b/c/d").cd("../x").getPath() should return "/a/b/c/x". Note: The evaluation environment uses '\' as the path separator. public class Path {     private String path;     public Path(String path) {         this.path = path;     }     public String getPath() {         return path;     }     public Path cd(String newPath) {         //throw new UnsupportedOperationException("Waiting to be implemented."); String[] newP=newPath.split("/");     String[] oldP=path.split("/");     int lnCount=0;     for(String str:newP){     if(st...