给定一个包含N 个字符串的队列Q ,任务是重构队列使其大小加倍,使得后半部分代表前半部分的镜像。
例子:
Input: Q = {“Hello”, “World”}
Output: {“Hello”, “World”, “World”, “Hello”}
Explanation:
The second half of the output queue is the mirror image of the first half. That is:
“Hello”, “World” | “World”, “Hello”
Input: Q = {“Hi”, “Geeks”}
Output: {“Hi”, “Geeks”, “Geeks”, “Hi”}
处理方法:仔细观察,我们可以说输出队列的后半部分与前半部分相反。那是:
- 将队列的大小存储在名为size的变量中。
- 将 Queue 元素推入堆栈而不实际丢失元素。这可以通过使用 emplace() 来实现。
- 重复这个过程,直到size变为 0。
- 将堆栈中的元素推回队列。
下面是上述方法的实现。
C++
// C++ program to arrange the
// elements of the queue
// to the end such that
// the halves are mirror
// order of each other
#include
using namespace std;
// Function to display
// the elements of
// the queue
void showq(queue q)
{
// Iterating through the queue
// and printing the elements
while (!q.empty()) {
cout << q.front() << " ";
q.pop();
}
}
// Function to produce mirror elements
void mirrorQueue(queue& q)
{
int size = q.size();
// Defining a stack
stack st;
// Pushing the elements
// of a queue
// in a stack without
// losing them
// from the queue
while (size--) {
string x = q.front();
// Push the element
// to the end of the
// queue
q.emplace(x);
// Push the element
// into the stack
st.push(x);
// Remove the element
q.pop();
}
// Appending the elements
// from the stack
// to the queue
while (!st.empty()) {
string el = st.top();
q.push(el);
st.pop();
}
}
// Driver Code
int main()
{
queue q;
q.push("Hello");
q.push("World");
mirrorQueue(q);
showq(q);
return 0;
}
Java
// Java program to arrange the
// elements of the queue
// to the end such that
// the halves are mirror
// order of each other
import java.util.*;
class GFG{
// Function to display
// the elements of
// the queue
static void showq(Queue q)
{
// Iterating through the queue
// and printing the elements
while (!q.isEmpty())
{
System.out.print(q.peek() + " ");
q.remove();
}
}
// Function to produce mirror elements
static void mirrorQueue(Queue q)
{
int size = q.size();
// Defining a stack
Stack st = new Stack<>();
// Pushing the elements
// of a queue
// in a stack without
// losing them
// from the queue
while (size-->0)
{
String x = q.peek();
// Push the element
// to the end of the
// queue
q.add(x);
// Push the element
// into the stack
st.add(x);
// Remove the element
q.remove();
}
// Appending the elements
// from the stack
// to the queue
while (!st.isEmpty())
{
String el = st.peek();
q.add(el);
st.pop();
}
}
// Driver Code
public static void main(String[] args)
{
Queue q =
new inkedList();
q.add("Hello");
q.add("World");
mirrorQueue(q);
showq(q);
}
}
// This code is contributed by gauravrajput1
Python3
# Python3 program to arrange the
# elements of the queue
# to the end such that
# the halves are mirror
# order of each other
# Function to display
# the elements of
# the queue
def showq(q) :
# Iterating through the queue
# and printing the elements
while (len(q) != 0) :
print(q[0] , end = " ")
q.pop(0)
# Function to produce mirror elements
def mirrorQueue(q) :
size = len(q)
# Defining a stack
st = []
# Pushing the elements
# of a queue
# in a stack without
# losing them
# from the queue
while (size > 0) :
x = q[0]
# Push the element
# to the end of the
# queue
q.append(x)
# Push the element
# into the stack
st.append(x)
# Remove the element
q.pop(0)
size -= 1
# Appending the elements
# from the stack
# to the queue
while (len(st) != 0) :
el = st[len(st) - 1]
q.append(el)
st.pop()
q = []
q.append("Hello")
q.append("World")
mirrorQueue(q)
showq(q)
# This code is contributed by divyeshrabadiya07
C#
// C# program to arrange the
// elements of the queue
// to the end such that
// the halves are mirror
// order of each other
using System;
using System.Collections.Generic;
class GFG{
// Function to display
// the elements of
// the queue
static void showq(Queue q)
{
// Iterating through the queue
// and printing the elements
while (q.Count != 0)
{
Console.Write(q.Peek() + " ");
q.Dequeue();
}
}
// Function to produce mirror elements
static void mirrorQueue(Queue q)
{
int size = q.Count;
// Defining a stack
Stack st = new Stack();
// Pushing the elements
// of a queue
// in a stack without
// losing them
// from the queue
while (size --> 0)
{
String x = q.Peek();
// Push the element
// to the end of the
// queue
q.Enqueue(x);
// Push the element
// into the stack
st.Push(x);
// Remove the element
q.Dequeue();
}
// Appending the elements
// from the stack
// to the queue
while (st.Count != 0)
{
String el = st.Peek();
q.Enqueue(el);
st.Pop();
}
}
// Driver Code
public static void Main(String[] args)
{
Queue q = new Queue();
q.Enqueue("Hello");
q.Enqueue("World");
mirrorQueue(q);
showq(q);
}
}
// This code is contributed by Rajput-Ji
输出:
Hello World World Hello
时间复杂度: O(N) ,其中 N 是队列的大小。
如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live