Dada una array de enteros A[] sin elementos duplicados, escriba una función que devuelva el recuento de todas las permutaciones de una array que no tenga subarreglo de [i, i+1] para cada i en A[].
Ejemplos:
Input : 1 3 9 Output : 3 All the permutation of 1 3 9 are : [1, 3, 9], [1, 9, 3], [3, 9, 1], [3, 1, 9], [9, 1, 3], [9, 3, 1] Here [1, 3, 9], [9, 1, 3] are removed as they contain subarray [1, 3] from original list and [3, 9, 1] removed as it contains subarray [3, 9] from original list so, Following are the 3 arrays that satisfy the condition : [1, 9, 3], [3, 1, 9], [9, 3, 1] Input : 1 3 9 12 Output : 11
Solución ingenua: iterar a través de la lista de todas las permutaciones y eliminar las arrays que contienen cualquier subarreglo [i, i+1] de A[] .
Código: código de Python para averiguar la permutación en la array
Python3
# Python implementation of the approach from itertools import permutations # Function that returns the count of all the permutation # having no subarray of [i,i+1] def count(arr): z=[] perm = permutations(arr) for i in list(perm): z.append(list(i)) q=[] for i in range(len(arr)-1): x,y=arr[i],arr[i+1] for j in range(len(z)): if z[j].index(x)!=len(z[j])-1: if z[j][z[j].index(x)+1]==y: q.append(z[j]) for i in range(len(q)): if q[i] in z: z.remove(q[i]) return len(z) # Driver Code A = [1,3, 8, 9] print(count(A))
Producción :
11
Solución eficiente: La siguiente es una solución recursiva basada en el hecho de que la longitud de la array decide el número de todas las permutaciones que no tienen subarreglo [i, i+1] para cada i en A[ ]
Supongamos que la longitud de A[ ] es n, entonces
n = n-1 count(0) = 1 count(1) = 1 count(n) = n * count(n-1) + (n-1) * count(n-2)
Código: a continuación se muestra el código para implementar la función recursiva que devuelve el recuento de permutaciones
C++
// C++ implementation of the approach // Recursive function that return count of // permutation based on the length of array. #include <bits/stdc++.h> using namespace std; int count(int n) { if(n == 0) return 1; if(n == 1) return 1; else return (n * count(n - 1)) + ((n - 1) * count(n - 2)); } // Driver code int main() { int A[] = {1, 2, 3, 9}; int len = sizeof(A) / sizeof(A[0]); cout << count(len - 1); } // This code is contributed by 29AjayKumar
Java
// Java implementation of the approach // Recursive function that return count of // permutation based on the length of array. import java.util.*; class GFG { static int count(int n) { if(n == 0) return 1; if(n == 1) return 1; else return (n * count(n - 1)) + ((n - 1) * count(n - 2)); } // Driver Code static public void main(String[] arg) { int []A = {1, 2, 3, 9}; System.out.print(count(A.length - 1)); } } // This code is contributed by PrinciRaj1992
Python3
# Python implementation of the approach # Recursive function that return count of # permutation based on the length of array. def count(n): if n == 0: return 1 if n == 1: return 1 else: return (n * count(n-1)) + ((n-1) * count(n-2)) # Driver Code A = [1, 2, 3, 9] print(count(len(A)-1))
C#
// C# implementation of the approach // Recursive function that return count of // permutation based on the length of array. using System; class GFG { static int count(int n) { if(n == 0) return 1; if(n == 1) return 1; else return (n * count(n - 1)) + ((n - 1) * count(n - 2)); } // Driver Code static public void Main(String[] arg) { int []A = {1, 2, 3, 9}; Console.Write(count(A.Length - 1)); } } // This code is contributed by Princi Singh
Javascript
<script> // Javascript implementation of the approach // Recursive function that return count of // permutation based on the length of array. function count(n) { if(n == 0) return 1; if(n == 1) return 1; else return (n * count(n - 1)) + ((n - 1) * count(n - 2)); } // Driver code let A = [1, 2, 3, 9]; let len = A.length; document.write(count(len - 1)); // This code is contributed by Samim Hossain Mondal. </script>
Producción :
11
Publicación traducida automáticamente
Artículo escrito por divyamohan123 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA