-
Notifications
You must be signed in to change notification settings - Fork 2
/
15. Caterpillar method. AbsDistinct.swift
41 lines (33 loc) · 1.37 KB
/
15. Caterpillar method. AbsDistinct.swift
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
36
37
38
39
40
41
import Foundation
import Glibc
// Solution @ Sergey Leschev, Belarusian State University
// 15. Caterpillar method. AbsDistinct.
// A non-empty array A consisting of N numbers is given. The array is sorted in non-decreasing order. The absolute distinct count of this array is the number of distinct absolute values among the elements of the array.
// For example, consider array A such that:
// A[0] = -5
// A[1] = -3
// A[2] = -1
// A[3] = 0
// A[4] = 3
// A[5] = 6
// The absolute distinct count of this array is 5, because there are 5 distinct absolute values among the elements of this array, namely 0, 1, 3, 5 and 6.
// Write a function:
// class Solution { public int solution(int[] A); }
// that, given a non-empty array A consisting of N numbers, returns absolute distinct count of array A.
// For example, given array A such that:
// A[0] = -5
// A[1] = -3
// A[2] = -1
// A[3] = 0
// A[4] = 3
// A[5] = 6
// the function should return 5, as explained above.
// Write an efficient algorithm for the following assumptions:
// N is an integer within the range [1..100,000];
// each element of array A is an integer within the range [-2,147,483,648..2,147,483,647];
// array A is sorted in non-decreasing order.
public func solution(_ A: inout [Int]) -> Int {
var distincts = Set<Int>()
A.forEach { distincts.insert(abs($0)) }
return distincts.count
}