
Gitt en liste over heltall, omorganiser listen slik at den består av alternerende minimum maksimumselementer bruker bare listeoperasjoner . Det første elementet i listen skal være minimum og det andre elementet skal være maksimum av alle elementene som finnes i listen. Tilsvarende tredje element vil være neste minimum element og fjerde element er neste maksimum element og så videre. Bruk av ekstra plass er ikke tillatt. Eksempler:
Input: [1 3 8 2 7 5 6 4]Recommended Practice Omorganisere array Prøv det!
Output: [1 8 2 7 3 6 4 5]
Input: [1 2 3 4 5 6 7]
Output: [1 7 2 6 3 5 4]
Input: [1 6 2 5 3 4]
Output: [1 6 2 5 3 4]
Tanken er å sortere listen i stigende rekkefølge først. Deretter begynner vi å poppe elementer fra slutten av listen og setter dem inn på riktig plassering i listen. Nedenfor er implementeringen av ideen ovenfor -
C++
// C++ program to rearrange a given list such that it // consists of alternating minimum maximum elements #include using namespace std; // Function to rearrange a given list such that it // consists of alternating minimum maximum elements void alternateSort(list<int>& inp) { // sort the list in ascending order inp.sort(); // get iterator to first element of the list list<int>::iterator it = inp.begin(); it++; for (int i=1; i<(inp.size() + 1)/2; i++) { // pop last element (next greatest) int val = inp.back(); inp.pop_back(); // insert it after next minimum element inp.insert(it val); // increment the pointer for next pair ++it; } } // Driver code int main() { // input list list<int> inp({ 1 3 8 2 7 5 6 4 }); // rearrange the given list alternateSort(inp); // print the modified list for (int i : inp) cout << i << ' '; return 0; }
Java // Java program to rearrange a given list such that it // consists of alternating minimum maximum elements import java.util.*; class AlternateSort { // Function to rearrange a given list such that it // consists of alternating minimum maximum elements // using LinkedList public static void alternateSort(LinkedList<Integer> ll) { Collections.sort(ll); for (int i = 1; i < (ll.size() + 1)/2; i++) { Integer x = ll.getLast(); ll.removeLast(); ll.add(2*i - 1 x); } System.out.println(ll); } public static void main (String[] args) throws java.lang.Exception { // input list Integer arr[] = {1 3 8 2 7 5 6 4}; // convert array to LinkedList LinkedList<Integer> ll = new LinkedList<Integer>(Arrays.asList(arr)); // rearrange the given list alternateSort(ll); } }
Python # Python program to rearrange a given list such that it # consists of alternating minimum maximum elements inp = [] # Function to rearrange a given list such that it # consists of alternating minimum maximum elements def alternateSort(): global inp # sort the list in ascending order inp.sort() # get index to first element of the list it = 0 it = it + 1 i = 1 while ( i < (len(inp) + 1)/2 ): i = i + 1 # pop last element (next greatest) val = inp[-1] inp.pop() # insert it after next minimum element inp.insert(it val) # increment the pointer for next pair it = it + 2 # Driver code # input list inp=[ 1 3 8 2 7 5 6 4 ] # rearrange the given list alternateSort() # print the modified list print (inp) # This code is contributed by Arnab Kundu
C# // C# program to rearrange a given list such that it // consists of alternating minimum maximum elements using System; using System.Collections.Generic; class GFG { // Function to rearrange a given list such that it // consists of alternating minimum maximum elements // using List public static void alternateSort(List<int> ll) { ll.Sort(); for (int i = 1; i < (ll.Count + 1)/2; i++) { int x = ll[ll.Count-1]; ll.RemoveAt(ll.Count-1); ll.Insert(2*i - 1 x); } foreach(int a in ll) { Console.Write(a+' '); } } // Driver code public static void Main (String[] args) { // input list int []arr = {1 3 8 2 7 5 6 4}; // convert array to List List<int> ll = new List<int>(arr); // rearrange the given list alternateSort(ll); } } /* This code contributed by PrinciRaj1992 */
JavaScript <script> // JavaScript program to rearrange a given list such that it // consists of alternating minimum maximum elements let inp = [] // Function to rearrange a given list such that it // consists of alternating minimum maximum elements function alternateSort(){ // sort the list in ascending order inp.sort() // get index to first element of the list let it = 0 it = it + 1 let i = 1 while ( i < (inp.length + 1)/2 ){ i = i + 1 // pop last element (next greatest) let val = inp[inp.length-1] inp.pop() // insert it after next minimum element inp.splice(it0 val) // increment the pointer for next pair it = it + 2 } } // Driver code // input list inp=[ 1 3 8 2 7 5 6 4 ] // rearrange the given list alternateSort() // print the modified list for(let x of inp){ document.write(x' ') } // This code is contributed by shinjanpatra </script>
Produksjon
1 8 2 7 3 6 4 5
Tidskompleksitet: O(N*logN) da vi bruker en sorteringsfunksjon.
Hjelpeplass: O(1) da vi ikke bruker ekstra plass.
Tilnærming #2: Bruk av sort()
Sorter den gitte listen i stigende rekkefølge Initialiser en tom resultatliste Iterer over halvparten av de sorterte listeindeksene: Legg til elementet fra gjeldende indeks og det tilsvarende elementet fra slutten av listen Hvis lengden på den opprinnelige listen er oddetall, legg til det midterste elementet i resultatlisten Konverter resultatlisten til en streng med mellomromseparerte heltall
Algoritme
1. Sorter listen ved å bruke sort()-funksjonen
2. Initialiser en tom resultatliste
3. Gå gjennom området til den første halvdelen av listen
4. Legg til det i-te elementet i den sorterte listen
5. Legg til det (-i-1)-te elementet i den sorterte listen
6. Hvis lengden på den opprinnelige listen er oddetall, legg til det midterste elementet i resultatlisten
7. Konverter resultatlisten til en streng ved å bruke join()-funksjonen
#include #include #include using namespace std; string alternateMinMax(vector<int> lst) { sort(lst.begin() lst.end()); vector<int> res; for (int i = 0; i < lst.size() / 2; i++) { res.push_back(lst[i]); res.push_back(lst[lst.size() - i - 1]); } if (lst.size() % 2 == 1) { res.push_back(lst[lst.size() / 2]); } string result = ''; for (int i = 0; i < res.size(); i++) { result += to_string(res[i]) + ' '; } return result; } int main() { vector<int> lst = {1 3 8 2 7 5 6 4}; cout << alternateMinMax(lst) << endl; return 0; }
Java import java.util.ArrayList; import java.util.Collections; import java.util.List; public class AlternateMinMax { // Function to rearrange a list of integers in alternating min-max order public static String alternateMinMax(List<Integer> lst) { // Sort the input list in ascending order Collections.sort(lst); List<Integer> res = new ArrayList<>(); // Iterate through the first half of the sorted list for (int i = 0; i < lst.size() / 2; i++) { res.add(lst.get(i)); res.add(lst.get(lst.size() - i - 1)); } // If the input list has an odd number of elements add the middle element if (lst.size() % 2 == 1) { res.add(lst.get(lst.size() / 2)); } // Create a StringBuilder to build the result string StringBuilder result = new StringBuilder(); // Append each element from the rearranged list to the result string for (int i = 0; i < res.size(); i++) { result.append(res.get(i)).append(' '); } return result.toString(); } public static void main(String[] args) { // Create a list of integers List<Integer> lst = new ArrayList<>(); lst.add(1); lst.add(3); lst.add(8); lst.add(2); lst.add(7); lst.add(5); lst.add(6); lst.add(4); // Call the alternateMinMax function and print the result System.out.println(alternateMinMax(lst)); } }
Python3 def alternate_min_max(lst): lst.sort() res = [] for i in range(len(lst) // 2): res.append(lst[i]) res.append(lst[-i-1]) if len(lst) % 2 == 1: res.append(lst[len(lst) // 2]) return ' '.join(map(str res)) lst = [1 3 8 2 7 5 6 4] print(alternate_min_max(lst))
C# using System; using System.Collections.Generic; using System.Linq; public class GFG { public static string GetAlternateMinMax(List<int> lst) { // Sort the list in ascending order lst.Sort(); List<int> res = new List<int>(); int n = lst.Count; // Create the alternating min-max list for (int i = 0; i < n / 2; i++) { res.Add(lst[i]); res.Add(lst[n - i - 1]); } // If the list has an odd number of elements add the middle element if (n % 2 == 1) { res.Add(lst[n / 2]); } // Convert the result list to a string string result = string.Join(' ' res); return result; } public static void Main(string[] args) { List<int> lst = new List<int> { 1 3 8 2 7 5 6 4 }; string result = GetAlternateMinMax(lst); Console.WriteLine(result); } }
JavaScript function alternateMinMax(lst) { lst.sort((a b) => a - b); // Initialize an empty array to // store the result const res = []; for (let i = 0; i < Math.floor(lst.length / 2); i++) { // Push the minimum element from the beginning res.push(lst[i]); res.push(lst[lst.length - i - 1]); } // If the length of the list is odd // push the middle element if (lst.length % 2 === 1) { res.push(lst[Math.floor(lst.length / 2)]); } // Convert the result array to a // space-separated string const result = res.join(' '); return result; } // Input list const lst = [1 3 8 2 7 5 6 4]; console.log(alternateMinMax(lst));
Produksjon
1 8 2 7 3 6 4 5
Tidskompleksitet: O(nlogn) på grunn av sorteringsoperasjonen. For-løkken itererer over halvparten av listen som tar O(n/2) tid. Konverteringen av resultatlisten til en streng tar O(n) tid. Siden O(nlogn) er større enn O(n), er den totale tidskompleksiteten O(n*logn).
Auxiliary Space: O(n) fordi den sorterte listen og resultatlisten begge tar O(n) plass. Plassen som brukes av variablene som brukes i funksjonen er konstant og avhenger ikke av størrelsen på inndatalisten.