Dada una array de tamaño N, la tarea es determinar si es posible ordenar la array o no con solo una mezcla. En una mezcla, podemos mover algunos elementos contiguos desde el final de la array y colocarlos al frente de la array.
Por ejemplo:
- A = {2, 3, 1, 2}, podemos desplazar {1, 2} desde el final del arreglo al frente del arreglo para ordenarlo.
- A = {1, 2, 3, 2} ya que no podemos ordenarlo de una sola vez, por lo tanto, no es posible ordenar la array.
Ejemplos:
Input: arr[] = {1, 2, 3, 4} Output: Possible Since this array is already sorted hence no need for shuffle. Input: arr[] = {6, 8, 1, 2, 5} Output: Possible Place last three elements at the front in the same order i.e. {1, 2, 5, 6, 8}
Acercarse:
- Compruebe si la array ya está ordenada o no. Si es así, devuelve verdadero.
- De lo contrario, comience a recorrer los elementos de la array hasta que el elemento actual sea más pequeño que el siguiente. Almacene ese índice donde arr[i] > arr[i+1].
- Recorra desde ese punto y verifique si los elementos de ese índice están en orden creciente o no.
- Si se cumplen las dos condiciones anteriores, compruebe si el último elemento es menor o igual que el primer elemento de la array dada.
- Escriba «Posible» si se cumplen las tres condiciones anteriores; de lo contrario, escriba «No es posible» si falla alguna de las 3 condiciones anteriores.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ implementation of above approach #include <bits/stdc++.h> using namespace std; // Function to check if it is possible bool isPossible(int a[], int n) { // step 1 if (is_sorted(a, a + n)) { cout << "Possible" << endl; } else { // break where a[i] > a[i+1] bool flag = true; int i; for (i = 0; i < n - 1; i++) { if (a[i] > a[i + 1]) { break; } } // break point + 1 i++; // check whether the sequence is // further increasing or not for (int k = i; k < n - 1; k++) { if (a[k] > a[k + 1]) { flag = false; break; } } // If not increasing after break point if (!flag) return false; else { // last element <= First element if (a[n - 1] <= a[0]) return true; else return false; } } } // Driver code int main() { int arr[] = { 3, 1, 2, 2, 3 }; int n = sizeof(arr) / sizeof(arr[0]); if (isPossible(arr, n)) cout << "Possible"; else cout << "Not Possible"; return 0; }
Java
// Java implementation of above approach class solution { //check if array is sorted static boolean is_sorted(int a[],int n) { int c1=0,c2=0; //if array is ascending for(int i=0;i<n-1;i++) { if(a[i]<=a[i+1]) c1++; } //if array is descending for(int i=1;i<n;i++) { if(a[i]<=a[i-1]) c2++; } if(c1==n||c2==n) return true; return false; } // Function to check if it is possible static boolean isPossible(int a[], int n) { // step 1 if (is_sorted(a,n)) { System.out.println("Possible"); } else { // break where a[i] > a[i+1] boolean flag = true; int i; for (i = 0; i < n - 1; i++) { if (a[i] > a[i + 1]) { break; } } // break point + 1 i++; // check whether the sequence is // further increasing or not for (int k = i; k < n - 1; k++) { if (a[k] > a[k + 1]) { flag = false; break; } } // If not increasing after break point if (!flag) return false; else { // last element <= First element if (a[n - 1] <= a[0]) return true; else return false; } } return false; } // Driver code public static void main(String[] args) { int arr[] = { 3, 1, 2, 2, 3 }; int n = arr.length; if (isPossible(arr, n)) System.out.println("Possible"); else System.out.println("Not Possible"); } } //contributed by Arnab Kundu
Python 3
# Python 3 implementation of # above approach def is_sorted(a): all(a[i] <= a[i + 1] for i in range(len(a) - 1)) # Function to check if # it is possible def isPossible(a, n): # step 1 if (is_sorted(a)) : print("Possible") else : # break where a[i] > a[i+1] flag = True for i in range(n - 1) : if (a[i] > a[i + 1]) : break # break point + 1 i += 1 # check whether the sequence is # further increasing or not for k in range(i, n - 1) : if (a[k] > a[k + 1]) : flag = False break # If not increasing after # break point if (not flag): return False else : # last element <= First element if (a[n - 1] <= a[0]): return True else: return False # Driver code if __name__ == "__main__": arr = [ 3, 1, 2, 2, 3 ] n = len(arr) if (isPossible(arr, n)): print("Possible") else: print("Not Possible") # This code is contributed # by ChitraNayal
C#
// C# implementation of above approach using System; class GFG { // check if array is sorted static bool is_sorted(int []a, int n) { int c1 = 0, c2 = 0; // if array is ascending for(int i = 0; i < n - 1; i++) { if(a[i] <= a[i + 1]) c1++; } // if array is descending for(int i = 1; i < n; i++) { if(a[i] <= a[i - 1]) c2++; } if(c1 == n || c2 == n) return true; return false; } // Function to check if it is possible static bool isPossible(int []a, int n) { // step 1 if (is_sorted(a,n)) { Console.WriteLine("Possible"); } else { // break where a[i] > a[i+1] bool flag = true; int i; for (i = 0; i < n - 1; i++) { if (a[i] > a[i + 1]) { break; } } // break point + 1 i++; // check whether the sequence is // further increasing or not for (int k = i; k < n - 1; k++) { if (a[k] > a[k + 1]) { flag = false; break; } } // If not increasing after // break point if (!flag) return false; else { // last element <= First element if (a[n - 1] <= a[0]) return true; else return false; } } return false; } // Driver code public static void Main() { int []arr = { 3, 1, 2, 2, 3 }; int n = arr.Length; if (isPossible(arr, n)) Console.WriteLine("Possible"); else Console.WriteLine("Not Possible"); } } // This code is contributed by anuj_67
PHP
<?php // PHP implementation of // above approach // Function to check if // it is possible function is_sorted($a, $n) { $c1 = 0; $c2 = 0; // if array is ascending for($i = 0; $i < $n - 1; $i++) { if($a[$i] <= $a[$i + 1]) $c1++; } // if array is descending for($i = 1; $i < $n; $i++) { if($a[$i] <= $a[$i - 1]) $c2++; } if($c1 == $n || $c2 == $n) return true; return false; } function isPossible($a, $n) { // step 1 if (is_sorted($a, $n)) { echo "Possible" . "\n"; } else { // break where a[i] > a[i+1] $flag = true; $i; for ($i = 0; $i < $n - 1; $i++) { if ($a[$i] > $a[$i + 1]) { break; } } // break point + 1 $i++; // check whether the sequence is // further increasing or not for ($k = $i; $k < $n - 1; $k++) { if ($a[$k] > $a[$k + 1]) { $flag = false; break; } } // If not increasing after // break point if (!$flag) return false; else { // last element <= First element if ($a[$n - 1] <= $a[0]) return true; else return false; } } } // Driver code $arr = array( 3, 1, 2, 2, 3 ); $n = sizeof($arr); if (isPossible($arr, $n)) echo "Possible"; else echo "Not Possible"; // This code is contributed // by Akanksha Rai(Abby_akku) ?>
Javascript
<script> // Javascript implementation of above approach // check if array is sorted function is_sorted(a) { let c1=0,c2=0; // if array is ascending for(let i=0;i<n-1;i++) { if(a[i]<=a[i+1]) { c1++; } } // if array is descending for(let i=1;i<n;i++) { if(a[i]<=a[i-1]) c2++; } if(c1==n||c2==n) { return true; } return false; } // Function to check if it is possible function isPossible(a,n) { // step 1 if (is_sorted(a,n)) { document.write("Possible"); } else { // break where a[i] > a[i+1] let flag = true; let i; for (i = 0; i < n - 1; i++) { if (a[i] > a[i + 1]) { break; } } // break point + 1 i++; // check whether the sequence is // further increasing or not for (let k = i; k < n - 1; k++) { if (a[k] > a[k + 1]) { flag = false; break; } } // If not increasing after break point if (!flag) { return false; } else { // last element <= First element if (a[n - 1] <= a[0]) return true; else return false; } } return false; } // Driver code let arr=[3, 1, 2, 2, 3]; let n = arr.length; if(isPossible(arr, n)) document.write("Possible"); else document.write("Not Possible"); // This code is contributed by avanitrachhadiya2155 </script>
Producción:
Possible
Complejidad de tiempo: O(n)
Espacio Auxiliar: O(1)
Publicación traducida automáticamente
Artículo escrito por Shashank_Pathak y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA