Проверить, являются ли элементы очереди попарно последовательными | Комплект-2
Опубликовано: 24 Января, 2022
Дана очередь целых чисел. Задача состоит в том, чтобы проверить, являются ли последовательные элементы в очереди попарно последовательными.
Примеры:
Ввод: 1 2 5 6 9 10 Выход: Да Ввод: 2 3 9 11 8 7 Выход: Нет
Рекомендуется: сначала попробуйте свой подход в {IDE}, прежде чем переходить к решению.
Подход :
- Возьмите переменную n для хранения размера очереди.
- Поместите элемент в очередь, который действует как маркер.
- Теперь, если размер очереди нечетный, начните выталкивать пару, пока n> 2. Кроме того, при выталкивании этих пар проверьте их разницу и уменьшите n на 2, если разница не равна 1, установите флаг в false.
- Если размер очереди четный, начните выталкивать пару, пока n> 1. Кроме того, при выталкивании этих пар проверьте их разницу и уменьшите n на 2, если их разница не равна 1, установите флаг в false.
- Наконец, отметьте флаг, если он верен, это означает, что элементы в очереди попарно отсортированы, в противном случае - нет.
Below is the implementation of above approach:
C++
// C++ program to check if successive// pair of numbers in the queue are// consecutive or not#include <bits/stdc++.h>using namespace std;// Function to check if elements are// pairwise consecutive in queuebool pairWiseConsecutive(queue<int> q){ // Fetching size of queue int n = q.size(); // Pushing extra element to the queue // which acts as marker q.push(INT_MIN); // Result flag bool result = true; // If number of elements in the // queue is odd pop elements while // its size is greater than 2. // Else, pop elements while its // size is greater than 1 if (n % 2 != 0) { while (n > 2) { int x = q.front(); q.pop(); q.push(x); n--; int y = q.front(); q.pop(); q.push(y); n--; if (abs(x - y) != 1) { result = false; } } // Popping the last element of queue // and pushing it again. // Also, popping the extra element // that we have pushed as marker q.push(q.front()); q.pop(); q.pop(); } else { while (n > 1) { int x = q.front(); q.pop(); q.push(x); n--; int y = q.front(); q.pop(); q.push(y); n--; if (abs(x - y) != 1) { result = false; } } // popping the extra element that // we have pushed as marker q.pop(); } return result;}// Driver programint main(){ // Pushing elements into the queue queue<int> q; q.push(4); q.push(5); q.push(-2); q.push(-3); q.push(11); q.push(10); q.push(5); q.push(6); q.push(8); if (pairWiseConsecutive(q)) cout << "Yes" << endl; else cout << "No" << endl; return 0;} |
Java
import java.util.LinkedList;import java.util.Queue;// Java program to check if successive// pair of numbers in the queue are// consecutive or notpublic class GFG {// Function to check if elements are// pairwise consecutive in queue static boolean pairWiseConsecutive(Queue<Integer> q) { // Fetching size of queue int n = q.size(); // Pushing extra element to the queue // which acts as marker q.add(Integer.MAX_VALUE); // Result flag boolean result = true; // If number of elements in the // queue is odd pop elements while // its size is greater than 2. // Else, pop elements while its // size is greater than 1 if (n % 2 != 0) { while (n > 2) { int x = q.peek(); q.remove(); q.add(x); n--; int y = q.peek(); q.remove(); q.add(y); n--; if (Math.abs(x - y) != 1) { result = false; } } // Popping the last element of queue // and pushing it again. // Also, popping the extra element // that we have pushed as marker q.add(q.peek()); q.remove(); q.remove(); } else { while (n > 1) { int x = q.peek(); q.remove(); q.add(x); n--; int y = q.peek(); q.remove(); q.add(y); n--; if (Math.abs(x - y) != 1) { result = false; } } // popping the extra element that // we have pushed as marker q.remove(); } return result; }// Driver program static public void main(String[] args) { // Pushing elements into the queue Queue<Integer> q = new LinkedList<>(); q.add(4); q.add(5); q.add(-2); q.add(-3); q.add(11); q.add(10); q.add(5); q.add(6); q.add(8); if (pairWiseConsecutive(q)) { System.out.println("Yes"); } else { System.out.println("No"); } }}// This code is contributed by Rajput-Ji |
Python3
# Python3 program to check if successive# pair of numbers in the queue are# consecutive or notimport sys, queue# Function to check if elements are# pairwise consecutive in queuedef pairWiseConsecutive(q): # Fetching size of queue n = q.qsize() # Pushing extra element to the # queue which acts as marker q.put(-sys.maxsize); # Result flag result = bool(True) # If number of elements in the # queue is odd pop elements while # its size is greater than 2. # Else, pop elements while its # size is greater than 1 if (n % 2 != 0): while (n > 2): x = q.queue[0] q.get() q.put(x) n -= 1 y = q.queue[0] q.get() q.put(y) n -= 1 if (abs(x - y) != 1): result = bool(False) # Popping the last element of queue # and pushing it again. # Also, popping the extra element # that we have pushed as marker q.put(q.queue[0]) q.get() q.get() else: while (n > 1): x = q.queue[0] q.get() q.put(x) n -= 1 y = q.queue[0] q.get() q.put(y) n -= 1 if (abs(x - y) != 1): result = bool(False) # popping the extra element that # we have pushed as marker q.get() return result# Driver code# Pushing elements into the queueq = queue.Queue()q.put(4)q.put(5)q.put(-2)q.put(-3)q.put(11)q.put(10)q.put(5)q.put(6)q.put(8)if (bool(pairWiseConsecutive(q))): print("Yes")else: print("No")# This code is contributed by divyeshrabadiya07 |
C#
// C# rogram to check if successive// pair of numbers in the queue are// consecutive or notusing System;using System.Collections.Generic;class GFG{ // Function to check if elements are // pairwise consecutive in queue static Boolean pairWiseConsecutive(Queue<int> q) { // Fetching size of queue int n = q.Count; // Pushing extra element to the queue // which acts as marker q.Enqueue(int.MaxValue); // Result flag Boolean result = true; // If number of elements in the // queue is odd pop elements while // its size is greater than 2. // Else, pop elements while its // size is greater than 1 if (n % 2 != 0) { while (n > 2) { int x = q.Peek(); q.Dequeue(); q.Enqueue(x); n--; int y = q.Peek(); q.Dequeue(); q.Enqueue(y); n--; if (Math.Abs(x - y) != 1) { result = false; } } // Popping the last element of queue // and pushing it again. // Also, popping the extra element // that we have pushed as marker q.Enqueue(q.Peek()); q.Dequeue(); q.Dequeue(); } else { while (n > 1) { int x = q.Peek(); q.Dequeue(); q.Enqueue(x); n--; int y = q.Peek(); q.Dequeue(); q.Enqueue(y); n--; if (Math.Abs(x - y) != 1) { result = false; } } // popping the extra element that // we have pushed as marker q.Dequeue(); } return result; } // Driver Code static public void Main(String[] args) { // Pushing elements into th
РЕКОМЕНДУЕМЫЕ СТАТЬИ |