Write a function
class Solution { public int solution(int[] A); }
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] = 1
the 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].
중복된 숫자를 모두 구별한 숫자가 배열에 몇개인지 리턴하면되므로 Set을 활용하였다.
import java.util.HashSet;
import java.util.Set;
class Solution {
public int solution(int[] A) {
Set set = new HashSet();
for(int num: A) {
set.add(num);
}
return set.size();
}
}
Stream을 활용한 답안도 있다.
public int solution(int[] A) {
return (int)Arrays.stream(A).distinct().count();
}
XOR 비트 연산으로 중복 된 값 인지 체크하는 답안도 있다.
import java.util.Arrays;
public int solution(int[] A) {
int N = A.length;
if(0 == N) return 0;
Arrays.sort(A);
int distinctNum = 1;
for (int i=1; i<N; i++){
if(0 != (A[i -1] ^ A[i])) distinctNum++;
}
return distinctNum;
}