重新排列给定的列表,使其由交替的最小最大元素组成
给定一个整数列表,重新排列该列表,使其由仅使用列表操作的交替最小最大元素组成。列表的第一个元素应该是最小的,第二个元素应该是列表中存在的所有元素的最大值。同样,第三个元素将是下一个最小元素,第四个元素将是下一个最大元素,依此类推。不允许使用额外的空间。
例子:
Input: [1 3 8 2 7 5 6 4]
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]
这个想法是首先按升序对列表进行排序。然后我们开始从列表的末尾弹出元素并将它们插入到列表中的正确位置。
以下是上述想法的实现——
C/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& inp)
{
// sort the list in ascending order
inp.sort();
// get iterator to first element of the list
list::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 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 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 ll = new LinkedList(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 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 ll = new List(arr);
// rearrange the given list
alternateSort(ll);
}
}
/* This code contributed by PrinciRaj1992 */
输出:
1 8 2 7 3 6 4 5
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。