Open In App

CSES Solutions – Distinct Numbers

Last Updated : 01 May, 2024
Improve
Improve
Like Article
Like
Save
Share
Report

You are given a list of N integers arr[], and your task is to calculate the number of distinct values in the list.

Examples:

Input: N = 5, arr[] = {2, 2, 3, 3, 2}
Output: 2
Explanation: There are only two distinct elements: 2 and 3 in the array arr[].

Input: N = 6, arr[] = {1, 1, 2, 2, 3, 4}
Output: 4
Explanation: There are only 4 distinct elements: 1, 2, 3 and 4 in the array arr[].

Approach: To solve the problem, follow the below idea:

The problem can be solved by storing all the numbers in the set. Storing all the numbers in the set will ensure that we only have unique elements in the set. Finally, we can print the size of the set.

Step-by-step algorithm:

  • Maintain a set to store all the distinct elements of arr[].
  • Iterate through all the elements in arr[] and insert them into the set.
  • After pushing all the elements into the set, print the size of the set as the final answer.

Below is the implementation of the approach:

C++
#include <bits/stdc++.h>
using namespace std;
int main()
{
    // Sample Input
    int N = 5;
    int arr[] = { 2, 2, 3, 3, 2 };
    
    // Set to store all the elements
    set<int> s;
    for (int i = 0; i < N; i++) {
        s.insert(arr[i]);
    }
    cout << s.size();
}
Java
import java.util.HashSet;
import java.util.Set;

public class SetExample {

    public static void main(String[] args)
    {
        // Sample Input
        int N = 5;
        int[] arr = { 2, 2, 3, 3, 2 };

        // Set to store all the elements
        Set<Integer> set = new HashSet<>();

        for (int i = 0; i < N; i++) {
            set.add(arr[i]);
        }

        System.out.println(set.size());
    }
}

// This code is contributed by rambabuguphka
Python
def main():
    # Sample Input
    N = 5
    arr = [2, 2, 3, 3, 2]

    # Set to store all the elements
    unique_elements = set()

    for num in arr:
        unique_elements.add(num)

    print(len(unique_elements))


if __name__ == "__main__":
    main()
C#
using System;
using System.Collections.Generic;

class GFG
{
    static void Main()
    {
        // Sample Input
        int N = 5;
        int[] arr = { 2, 2, 3, 3, 2 };

        // HashSet to store all the elements
        HashSet<int> set = new HashSet<int>();
        for (int i = 0; i < N; i++)
        {
            set.Add(arr[i]);
        }

        Console.WriteLine(set.Count);
    }
}
JavaScript
// Sample Input
const N = 5;
const arr = [2, 2, 3, 3, 2];

// Set to store all the elements
const s = new Set();

// Insert elements into the set
for (let i = 0; i < N; i++) {
    s.add(arr[i]);
}

// Print the number of unique elements
console.log(s.size);

Output
2

Time Complexity: O(NlogN), where N is the size of input array arr[].
Auxiliary Space: O(N)

Approach 2 (Using Map)

Create a function and inside create an unordered map to store the frequency of each element in the input vector. Iterate through the input vector using a range-based for loop. For each element , increment its frequency in the unordered map. After counting the frequencies of all elements, return the size of the map, which represents the number of distinct values in the input vector.

Step-by-Step Implementation

  • Define a function called that takes a constant reference to a vector of integers as input and returns an integer representing the number of distinct values in the vector.
  • Inside the function, initialize an unordered map with int as both key and value types. This map will store the frequency of each distinct element in the vector.
  • Use a for loop to iterate through each element of the input vector. Inside the loop, update the frequency map by incrementing the count for the current element in vector.
  • After iterating through the entire vector, return the size of the frequency map, which represents the number of distinct values in the vector.

Below is the implementation of above approach :

C++
#include <iostream>
#include <vector>
#include <unordered_map>

using namespace std;

int DistinctValuesMap(const vector<int>& arr) {
    unordered_map<int, int> freqMap;
    for (int num : arr) {
        freqMap[num]++;
    }
    return freqMap.size();
}

int main() {
    vector<int> arr = {1, 2, 3, 4, 4, 4, 5, 5, 6, 7, 7, 7}; 
    cout << "Number of distinct values are : " << DistinctValuesMap(arr) << endl;
    return 0;
}
Java
import java.util.HashMap;
import java.util.Map;

public class DistinctValues {

    static int distinctValuesMap(int[] arr) {
        Map<Integer, Integer> freqMap = new HashMap<>();
        for (int num : arr) {
            freqMap.put(num, freqMap.getOrDefault(num, 0) + 1);
        }
        return freqMap.size();
    }

    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 4, 4, 5, 5, 6, 7, 7, 7}; 
        System.out.println("Number of distinct values are : " + distinctValuesMap(arr));
    }
}
Python3
def distinct_values_map(arr):
    freq_map = {}  # Create an empty dictionary to store frequency of each element
    for num in arr:
        freq_map[num] = freq_map.get(num, 0) + 1  # Increment frequency count for each element
    return len(freq_map)  # Return the number of distinct values

# Main function
def main():
    arr = [1, 2, 3, 4, 4, 4, 5, 5, 6, 7, 7, 7] 
    # Call the distinct_values_map function to get the number of distinct values
    distinct_count = distinct_values_map(arr)
    # Print the number of distinct values
    print("Number of distinct values are:", distinct_count)

# Execute main function
if __name__ == "__main__":
    main()
JavaScript
function distinctValuesMap(arr) {
    let freqMap = new Map();
    for (let num of arr) {
        if (freqMap.has(num)) {
            freqMap.set(num, freqMap.get(num) + 1);
        } else {
            freqMap.set(num, 1);
        }
    }
    return freqMap.size;
}

// Main function
function main() {
    let arr = [1, 2, 3, 4, 4, 4, 5, 5, 6, 7, 7, 7];
    console.log("Number of distinct values are:", distinctValuesMap(arr));
}

// Call the main function
main();

Output
Number of distinct values are : 7

Time Complexity: O(n)
Space Complexity: O(n)




Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads