Codility - AbsDistinct

그냥 이렇게 풀면 안 되나 해서 풀었던 방법.
RESULT

import java.util.*;

class Solution {
    private Set<Long> set = new HashSet<>();

    public int solution(int[] A) {
        for (int a : A) {
            set.add(Math.abs(Long.valueOf(a)));
        }

        return set.size();
    }
}

Caterpillar Method를 사용한 방법.
성능은 이 경우는 양 끝단에서 범위를 줄이기 때문에 더 빠르다.
RESULT

import java.util.*;

class Solution {

    public int solution(int[] A) {
        int count = 0;
        int head = 0;
        int tail = A.length - 1;

        while (head <= tail) {
            if (head > 0 && A[head] == A[head-1]) {
                head++;
                continue;
            } 
            
            if (tail < A.length-1 && A[tail] == A[tail+1]) {
                tail--;
                continue;
            }

            long absHead = Math.abs(Long.valueOf(A[head]));
            long absTail = Math.abs(Long.valueOf(A[tail]));

            if (absHead == absTail) {
                tail--;
                head++;
            } else if (absHead < absTail) {
                tail--;
            } else {
                head++;
            }

            count++;
        }

        return count;
    }
}