Contar distintos puntos visitados en la recta numérica

Dada una persona que está en la posición actual_pos y una ruta de string binaria que son los movimientos que tomó la persona, si la ruta [i] = ‘0’ entonces la persona se movió un paso hacia la izquierda, y si la ruta [i] = ‘1’ entonces el persona se movió un paso a la derecha. La tarea es encontrar el recuento de las distintas posiciones que visitó la persona.

Ejemplos: 

Entrada: current_pos = 5, ruta = “011101” 
Salida:
Los movimientos dados son izquierda, derecha, derecha, derecha, izquierda y derecha, 
es decir, 5 -> 4 -> 5 -> 6 -> 7 -> 6 -> 7 
El número de posiciones distintas son 4 (4, 5, 6 y 7).

Entrada: pos_actual = 3, ruta = “110100” 
Salida:
3 -> 4 -> 5 -> 4 -> 5 -> 4 -> 3  

Acercarse:  

  • Declare una array puntos[] para almacenar todos los puntos por los que pasa la persona.
  • Inicialice la primera posición de esta array en la posición actual current_pos .
  • Atraviese la ruta de la string y haga lo siguiente: 
    • Si el carácter actual es ‘0’ , entonces la persona viajó a la izquierda. Así que disminuya la posición actual en 1 y guárdela en points[] .
    • Si el carácter actual es ‘1’ , entonces la persona viajó a la derecha. Así que incrementa la posición actual en 1 y guárdala en points[] .
  • Cuente el número total de elementos distintos en puntos[] . Consulte Contar elementos distintos en una array para conocer los diferentes métodos de contar el número de elementos distintos en una array.

A continuación se muestra la implementación del enfoque anterior: 

C++

// C++ implementation of the approach
#include <bits/stdc++.h>
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<Integer> hs = new HashSet<Integer>();
 
        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

<?php
// PHP implementation of the approach
 
// Utility function to return the number
// of distinct elements in an array
function countDistinct($arr, $len)
{ 
    $hs = array();
 
    for ($i = 0; $i < $len; $i++)
    {
        // add all the elements to the HashSet
        array_push($hs, $arr[$i]);
    }
 
    $hs = array_unique($hs);
     
    // Return the size of hashset as
    // it consists of all unique elements
    return count($hs);
}
 
// Function to return the count of
// positions the person went to
function getDistinctPoints($current_pos, $path)
{
 
    // Length of path
    $len = strlen($path);
 
    // Array to store all the points traveled
    $points = array();
 
    // The first point is the current_pos
    $points[0] = $current_pos;
 
    // For all the directions in path
    for ($i = 0; $i < $len; $i++)
    {
 
        // 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--;
 
            // 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
$current_pos = 5;
$path = "011101";
 
echo getDistinctPoints($current_pos, $path);
 
// This code is contributed by Ryuga
?>

Javascript

<script>
 
// JavaScript implementation of the approach
 
    // Function to return the count of
    // positions the person went to
    function getDistinctPoints(current_pos, path)
    {
   
        // Length of path
        let len = path.length;
   
        // Array to store all the points traveled
        let points =
        Array.from({length: len + 1}, (_, i) => 0);
   
        // The first point is the current_pos
        points[0] = current_pos;
   
        // For all the directions in path
        for (let i = 0; i < len; i++) {
   
            // Get whether the direction was left or right
            let 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
    function countDistinct(arr, len)
    {
   
       let hs = new Set();
   
        for (let 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
     
    let current_pos = 5;
        let path = "011101";
   
       document.write(getDistinctPoints(current_pos, path));
                 
</script>
Producción: 

4

 

Publicación traducida automáticamente

Artículo escrito por AbhijeetSridhar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *