Related Articles
Count distinct points visited on the number line
• Difficulty Level : Easy
• Last Updated : 21 Aug, 2019

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 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: 4
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
3 -> 4 -> 5 -> 4 -> 5 -> 4 -> 3

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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 current character is ‘0’, then the person traveled left. So decrement the current position by 1 and store it in points[].
• If 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 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 = 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 = 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

 ``
Output:
```4
```

Attention reader! Don’t stop learning now. Get hold of all the important Java Foundation and Collections concepts with the Fundamentals of Java and Java Collections Course at a student-friendly price and become industry ready. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up