Dada una array y un rango [lowVal, highVal] , divida la array alrededor del rango de modo que la array se divida en tres partes.
1) Todos los elementos más pequeños que lowVal van primero.
2) Todos los elementos en el rango lowVal a highVal vienen a continuación.
3) Todos los elementos mayores que highVal aparecen al final.
Los elementos individuales de tres conjuntos pueden aparecer en cualquier orden.
Ejemplos:
Input: arr = [1, 14, 5, 20, 4, 2, 54, 20, 87, 98, 3, 1, 32] lowVal = 14, highVal = 20 Output: arr = [1, 5, 4, 2, 3, 1, 14, 20, 20, 54, 87, 98, 32] Input: arr = [1, 14, 5, 20, 4, 2, 54, 20, 87, 98, 3, 1, 32] lowVal = 20, highVal = 20 Output: arr = [1, 14, 5, 4, 2, 3, 1, 20, 20, 54, 87, 98, 32]
Tenemos una solución existente para este problema, consulte la partición de tres vías de una array alrededor de un enlace de rango dado. Podemos resolver este problema rápidamente en python usando List Comprehension . El enfoque es simple,
- Lista separada en tres partes, la primera contendrá elementos menores que lowVal , la segunda contendrá elementos entre lowVal y highVal , la tercera contendrá elementos mayores que highVal .
- Concatenar las tres partes juntas.
# Function for Three way partitioning of an # array around a given range def threeWay(input, lowVal, highVal): # separate input list in three parts first = [ num for num in input if num<lowVal ] second = [ num for num in input if (num>=lowVal and num<=highVal) ] third = [ num for num in input if num>highVal ] # concatenate all three parts print(first + second + third) # Driver program if __name__ == "__main__": input = [1, 14, 5, 20, 4, 2, 54, 20, 87, 98, 3, 1, 32] lowVal = 14 highVal = 20 threeWay(input, lowVal, highVal)
Producción:
[1, 5, 4, 2, 3, 1, 14, 20, 20, 54, 87, 98, 32]
Publicación traducida automáticamente
Artículo escrito por Shashank Mishra y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA