# Count distinct points visited on the number line

• Difficulty Level : Easy
• Last Updated : 18 Nov, 2022

Given a person who is at position current_pos and a binary string path which is the moves the person took, if path[i] = ‘0’ then the person moved one step left, and if path[i] = ‘1’ then the person moved one step to the right. The task is to find the count of distinct positions the person visited.

Examples:

Input: current_pos = 5, path = “011101”
Output:
Given moves are left, right, right, right, left and right
i.e. 5 -> 4 -> 5 -> 6 -> 7 -> 6 -> 7
The number of distinct positions are 4 (4, 5, 6 and 7).

Input: current_pos = 3, path = “110100”
Output:
3 -> 4 -> 5 -> 4 -> 5 -> 4 -> 3

Approach:

• Declare an array points[] to store all the points the person goes through.
• Initialize the first position of this array to the current position current_pos.
• Traverse the string path and do the following:
• If the current character is ‘0’, then the person traveled left. So decrement the current position by 1 and store it in points[].
• If the current character is ‘1’, then the person traveled right. So increment the current position by 1 and store it in points[].
• Count the total number of distinct elements in points[]. Refer Count distinct elements in an array for different methods of counting the number of distinct elements in an array.

Below is the implementation of the above approach:

## C++

 `// C++ implementation of the approach``#include ``using` `namespace` `std;` `// Utility function to return the number``// of distinct elements in an array``int` `countDistinct(``int` `arr[], ``int` `len)``{` `    ``set<``int``> hs;` `    ``for` `(``int` `i = 0; i < len; i++) {``        ``// add all the elements to the HashSet``        ``hs.insert(arr[i]);``    ``}` `    ``// Return the size of hashset as``    ``// it consists of all unique elements``    ``return` `hs.size();``}` `// Function to return the count of``// positions the person went to``int` `getDistinctPoints(``int` `current_pos, string path)``{` `    ``// Length of path``    ``int` `len = path.length();` `    ``// Array to store all the points traveled``    ``int` `points[len + 1];` `    ``// The first point is the current_pos``    ``points[0] = current_pos;` `    ``// For all the directions in path``    ``for` `(``int` `i = 0; i < len; i++) {` `        ``// Get whether the direction was left or right``        ``char` `ch = path[i];` `        ``// If the direction is left``        ``if` `(ch == ``'0'``) {` `            ``// Decrement the current position by 1``            ``current_pos--;` `            ``// Store the current position in array``            ``points[i + 1] = current_pos;``        ``}` `        ``// If the direction is right``        ``else` `{` `            ``// Increment the current position by 1``            ``current_pos++;` `            ``// Store the current position in array``            ``points[i + 1] = current_pos;``        ``}``    ``}` `    ``return` `countDistinct(points, len + 1);``}` `// Driver code``int` `main()``{``    ``int` `current_pos = 5;``    ``string path = ``"011101"``;` `    ``cout << (getDistinctPoints(current_pos, path));` `    ``return` `0;``}``// contributed by Arnab Kundu`

## Java

 `// Java implementation of the approach``import` `java.util.*;``class` `GFG {` `    ``// Function to return the count of``    ``// positions the person went to``    ``public` `static` `int` `getDistinctPoints(``int` `current_pos, String path)``    ``{` `        ``// Length of path``        ``int` `len = path.length();` `        ``// Array to store all the points traveled``        ``int` `points[] = ``new` `int``[len + ``1``];` `        ``// The first point is the current_pos``        ``points[``0``] = current_pos;` `        ``// For all the directions in path``        ``for` `(``int` `i = ``0``; i < len; i++) {` `            ``// Get whether the direction was left or right``            ``char` `ch = path.charAt(i);` `            ``// If the direction is left``            ``if` `(ch == ``'0'``) {` `                ``// Decrement the current position by 1``                ``current_pos--;` `                ``// Store the current position in array``                ``points[i + ``1``] = current_pos;``            ``}` `            ``// If the direction is right``            ``else` `{` `                ``// Increment the current position by 1``                ``current_pos++;` `                ``// Store the current position in array``                ``points[i + ``1``] = current_pos;``            ``}``        ``}` `        ``return` `countDistinct(points, len + ``1``);``    ``}` `    ``// Utility function to return the number``    ``// of distinct elements in an array``    ``public` `static` `int` `countDistinct(``int` `arr[], ``int` `len)``    ``{` `        ``HashSet hs = ``new` `HashSet();` `        ``for` `(``int` `i = ``0``; i < len; i++) {``            ``// add all the elements to the HashSet``            ``hs.add(arr[i]);``        ``}` `        ``// Return the size of hashset as``        ``// it consists of all unique elements``        ``return` `hs.size();``    ``}` `    ``// Driver code``    ``public` `static` `void` `main(String[] args)``    ``{``        ``int` `current_pos = ``5``;``        ``String path = ``"011101"``;` `        ``System.out.print(getDistinctPoints(current_pos, path));``    ``}``}`

## Python3

 `# Utility function to return the number``# of distinct elements in an array``def` `countDistinct(arr, ``Len``):` `    ``hs ``=` `dict``()` `    ``for` `i ``in` `range``(``Len``):``        ` `        ``# add all the elements to the HashSet``        ``hs[arr[i]] ``=` `1` `    ``# Return the size of hashset as``    ``# it consists of all unique elements``    ``return` `len``(hs)` `# Function to return the count of``# positions the person went to``def` `getDistinctPoints(current_pos, path):` `    ``# Length of path``    ``Len` `=` `len``(path)` `    ``# Array to store all the points traveled``    ``points ``=` `[``0` `for` `i ``in` `range``(``Len` `+` `1``)]` `    ``# The first pois the current_pos``    ``points[``0``] ``=` `current_pos` `    ``# For all the directions in path``    ``for` `i ``in` `range``(``Len``):` `        ``# Get whether the direction``        ``# was left or right``        ``ch ``=` `path[i]` `        ``# If the direction is left``        ``if` `(ch ``=``=` `'0'``):` `            ``# Decrement the current position by 1``            ``current_pos ``-``=` `1` `            ``# Store the current position in array``            ``points[i ``+` `1``] ``=` `current_pos` `        ``# If the direction is right``        ``else``:` `            ``# Increment the current position by 1``            ``current_pos ``+``=` `1` `            ``# Store the current position in array``            ``points[i ``+` `1``] ``=` `current_pos``        ` `    ``return` `countDistinct(points, ``Len` `+` `1``)` `# Driver code``current_pos ``=` `5``path ``=` `"011101"` `print``(getDistinctPoints(current_pos, path))` `# This code is contributed by mohit kumar`

## C#

 `// C# implementation of the approach``using` `System;``using` `System.Collections.Generic;` `class` `GFG {` `    ``// Function to return the count of``    ``// positions the person went to``    ``public` `static` `int` `getDistinctPoints(``int` `current_pos,``                                        ``string` `path)``    ``{` `        ``// Length of path``        ``int` `len = path.Length;` `        ``// Array to store all the points traveled``        ``int``[] points = ``new` `int``[len + 1];` `        ``// The first point is the current_pos``        ``points[0] = current_pos;` `        ``// For all the directions in path``        ``for` `(``int` `i = 0; i < len; i++) {` `            ``// Get whether the direction was left or right``            ``char` `ch = path[i];` `            ``// If the direction is left``            ``if` `(ch == ``'0'``) {` `                ``// Decrement the current position by 1``                ``current_pos--;` `                ``// Store the current position in array``                ``points[i + 1] = current_pos;``            ``}` `            ``// If the direction is right``            ``else` `{` `                ``// Increment the current position by 1``                ``current_pos++;` `                ``// Store the current position in array``                ``points[i + 1] = current_pos;``            ``}``        ``}` `        ``return` `countDistinct(points, len + 1);``    ``}` `    ``// Utility function to return the number``    ``// of distinct elements in an array``    ``public` `static` `int` `countDistinct(``int``[] arr, ``int` `len)``    ``{` `        ``HashSet<``int``> hs = ``new` `HashSet<``int``>();` `        ``for` `(``int` `i = 0; i < len; i++) {``            ``// add all the elements to the HashSet``            ``hs.Add(arr[i]);``        ``}` `        ``// Return the size of hashset as``        ``// it consists of all unique elements``        ``return` `hs.Count;``    ``}` `    ``// Driver code``    ``public` `static` `void` `Main(``string``[] args)``    ``{``        ``int` `current_pos = 5;``        ``string` `path = ``"011101"``;` `        ``Console.Write(getDistinctPoints(current_pos, path));``    ``}``}` `// This code is contributed by shrikanth13`

## PHP

 ``

## Javascript

 ``

Output:

`4`

Time Complexity: O(n), where n is the size of the given array.
Auxiliary Space: O(n), where n is the size of the given array.

My Personal Notes arrow_drop_up