Dada una array constante de n elementos que contiene elementos de 1 a n-1, cualquiera de estos números aparece cualquier número de veces. Encuentre cualquiera de estos números repetidos en O (n) y use solo espacio de memoria constante.
Ejemplos:
Input : arr[] = {1, 2, 3, 4, 5, 6, 3} Output : 3
Como la array dada es constante, los métodos dados en los siguientes artículos no funcionarán.
- Encuentra duplicados en tiempo O(n) y espacio extra O(1) | Serie 1
- Duplica en una array en O(n) y usando O(1) espacio extra | Conjunto-2
- Estamos tomando dos variables i & j comenzando desde 0
- Ejecutaremos el ciclo hasta que llegue al último elemento o encuentre elementos repetidos
- Incrementaremos previamente el valor de j para que podamos comparar el elemento con el elemento siguiente
- Si no encontramos el elemento, aumentaremos i ya que j apuntará al último elemento y luego reposicionaremos j con i
Java
// Java program to find a duplicate // element in an array with values in // range from 0 to n-1. import java.io.*; import java.util.*; public class GFG { // function to find one duplicate static int findduplicate(int []a, int n) { int i=0,j=0; while(i<n){ if(a[i]==a[++j]) return a[j]; if(j==n-1) { i++; j=i; } } return -1; } public static void main(String args[]) { int []arr = {1, 2, 4, 3, 4, 5, 6, 3}; int n = arr.length; System.out.print(findduplicate(arr, n)); } } // This code is contributed by // Love Raj
Java
// Java program to find a duplicate // element in an array with values in // range from 0 to n-1. import java.io.*; import java.util.*; public class GFG { // function to find one duplicate static int findduplicate(int []arr, int n) { // return -1 because in these cases // there can not be any repeated element if (n <= 1) return -1; // initialize fast and slow int slow = arr[0]; int fast = arr[arr[0]]; // loop to enter in the cycle while (fast != slow) { // move one step for slow slow = arr[slow]; // move two step for fast fast = arr[arr[fast]]; } // loop to find entry // point of the cycle fast = 0; while (slow != fast) { slow = arr[slow]; fast = arr[fast]; } return slow; } // Driver Code public static void main(String args[]) { int []arr = {1, 2, 3, 4, 5, 6, 3}; int n = arr.length; System.out.print(findduplicate(arr, n)); } } // This code is contributed by // Manish Shaw (manishshaw1)
Python 3
# Python 3 program to find a duplicate # element in an array with values in # range from 0 to n-1. # function to find one duplicate def findduplicate(arr, n): # return -1 because in these cases # there can not be any repeated element if (n <= 1): return -1 # initialize fast and slow slow = arr[0] fast = arr[arr[0]] # loop to enter in the cycle while (fast != slow) : # move one step for slow slow = arr[slow] # move two step for fast fast = arr[arr[fast]] # loop to find entry point of the cycle fast = 0 while (slow != fast): slow = arr[slow] fast = arr[fast] return slow # Driver Code if __name__ == "__main__": arr = [1, 2, 3, 4, 5, 6, 3 ] n = len(arr) print(findduplicate(arr, n)) # This code is contributed by ita_c
C#
// C# program to find a duplicate // element in an array with values in // range from 0 to n-1. using System; using System.Collections.Generic; class GFG { // function to find one duplicate static int findduplicate(int []arr, int n) { // return -1 because in these cases // there can not be any repeated element if (n <= 1) return -1; // initialize fast and slow int slow = arr[0]; int fast = arr[arr[0]]; // loop to enter in the cycle while (fast != slow) { // move one step for slow slow = arr[slow]; // move two step for fast fast = arr[arr[fast]]; } // loop to find entry // point of the cycle fast = 0; while (slow != fast) { slow = arr[slow]; fast = arr[fast]; } return slow; } // Driver Code public static void Main() { int []arr = {1, 2, 3, 4, 5, 6, 3}; int n = arr.Length; Console.Write(findduplicate(arr, n)); } } // This code is contributed by // Manish Shaw (manishshaw1)
PHP
<?php // PHP program to find a duplicate // element in an array with values in // range from 0 to n-1. // function to find one duplicate function findduplicate($arr, $n) { // return -1 because in these cases // there can not be any repeated element if ($n <= 1) return -1; // initialize fast and slow $slow = $arr[0]; $fast = $arr[$arr[0]]; // loop to enter in the cycle while ($fast != $slow) { // move one step for slow $slow = $arr[$slow]; // move two step for fast $fast = $arr[$arr[$fast]]; } // loop to find entry point of the cycle $fast = 0; while ($slow != $fast) { $slow = $arr[$slow]; $fast = $arr[$fast]; } return $slow; } // Driver Code $arr = array( 1, 2, 3, 4, 5, 6, 3 ); $n = sizeof($arr); echo findduplicate($arr, $n); // This code is contributed by Tushil ?>
Javascript
<script> // Javascript program to find a duplicate // element in an array with values in // range from 0 to n-1. // function to find one duplicate function findduplicate(arr, n) { // return -1 because in these cases // there can not be any repeated element if (n <= 1) return -1; // initialize fast and slow let slow = arr[0]; let fast = arr[arr[0]]; // loop to enter in the cycle while (fast != slow) { // move one step for slow slow = arr[slow]; // move two step for fast fast = arr[arr[fast]]; } // loop to find entry // point of the cycle fast = 0; while (slow != fast) { slow = arr[slow]; fast = arr[fast]; } return slow; } let arr = [1, 2, 3, 4, 5, 6, 3]; let n = arr.length; document.write(findduplicate(arr, n)); </script>
Producción:
3
Complejidad temporal: O(n*n)
Espacio auxiliar: O(1)
Enfoque eficiente:
Usaremos el concepto de que todos los elementos aquí están entre 1 y n-1.
Así que realizaremos estos pasos para encontrar el elemento Duplicado
- Considere un puntero ‘p’ que se encuentra actualmente en el índice 0.
- Ejecute un bucle while hasta que el puntero p alcance el valor n.
- si el valor de a[p] es -1, incremente el puntero en 1 y omita la iteración
- De lo contrario, vaya a la posición del elemento al que apunta el puntero actual, es decir, al índice a[p].
- Ahora, si el valor en el índice a[p], es decir, a[a[p]] es -1, rompa el bucle ya que el elemento a[p] es el duplicado.
- De lo contrario, almacene el valor de a[a[p]] en a[p], es decir, a[p]=a[a[p]] y coloque -1 en a[a[p]], es decir, a[a[p]] =-1.
Código:
C++
#include <iostream> using namespace std; void find_duplicate(int a[], int n) { int p = 0; while (p != n) { if (a[p] == -1) { p++; } else { if (a[a[p] - 1] == -1) { cout << a[p] << endl; break; } else { a[p] = a[a[p] - 1]; a[a[p] - 1] = -1; } } } } int main() { int a[] = { 1, 2, 4, 3, 4, 5, 6, 3 }; int n = sizeof(a) / sizeof(a[0]); find_duplicate(a, n); return 0; } // This Code is Contributed by Abhishek Purohit
Java
// Java Program for the above approach import java.io.*; class GFG { static void find_duplicate(int a[], int n) { int p = 0; while (p != n) { if (a[p] == -1) { p++; } else { if (a[a[p] - 1] == -1) { System.out.println(a[p]); break; } else { a[p] = a[a[p] - 1]; a[a[p] - 1] = -1; } } } } public static void main(String[] args) { int[] a = { 1, 2, 4, 3, 4, 5, 6, 3 }; int n = a.length; find_duplicate(a, n); } } // This Code is Contributed by lokesh (lokeshmvs21).
3
Tiempo Complejidad : O(n)
Espacio Auxiliar : O(1)
Publicación traducida automáticamente
Artículo escrito por niteesh_Kr y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA