Distintos elementos adyacentes en una array

Dada una array, encuentre si es posible obtener una array que tenga elementos vecinos distintos intercambiando dos elementos de array vecinos.

Ejemplos: 

Input : 1 1 2
Output : YES
swap 1 (second last element) and 2 (last element), 
to obtain 1 2 1, which has distinct neighbouring 
elements .

Input : 7 7 7 7
Output : NO
We can't swap to obtain distinct elements in 
neighbor .

Obtener una array que tenga distintos elementos vecinos solo es posible cuando la frecuencia de la mayoría de los elementos es menor o igual a la mitad del tamaño de la array, es decir ( <= (n+1)/2 ). Para hacerlo más claro considere diferentes ejemplos 

1st Example : 
    a[] = {1, 1, 2, 3, 1} 
    We can obtain array {1, 2, 1, 3, 1} by 
    swapping (2nd and 3rd) element from array a. 
    Here 1 occurs most and its frequency is 
    3 . So that 3 <= ((5+1)/2) .
    Hence, it is possible. 

A continuación se muestra la implementación de este enfoque. 

C++

// C++ program to check if we can make
// neighbors distinct.
#include <bits/stdc++.h>
using namespace std;
 
void distinctAdjacentElement(int a[], int n)
{
    // map used to count the frequency
    // of each element occurring in the
    // array
    map<int, int> m;
 
    // In this loop we count the frequency
    // of element through map m .
    for (int i = 0; i < n; ++i)
        m[a[i]]++;
 
    // mx store the frequency of element which
    // occurs most in array .
    int mx = 0;
 
    // In this loop we calculate the maximum
    // frequency and store it in variable mx.
    for (int i = 0; i < n; ++i)
        if (mx < m[a[i]])
            mx = m[a[i]];
 
    // By swapping we can adjust array only
    // when the frequency of the element
    // which occurs most is less than or
    // equal to (n + 1)/2 .
    if (mx > (n + 1) / 2)
        cout << "NO" << endl;
    else
        cout << "YES" << endl;
}
 
// Driver program to test the above function
int main()
{
    int a[] = { 7, 7, 7, 7 };
    int n = sizeof(a) / sizeof(a[0]);
    distinctAdjacentElement(a, n);
    return 0;
}

Python3

# Python program to check if we can make
# neighbors distinct.
def distantAdjacentElement(a, n):
 
    # dict used to count the frequency
    # of each element occurring in the
    # array
    m = dict()
 
    # In this loop we count the frequency
    # of element through map m
    for i in range(n):
        if a[i] in m:
            m[a[i]] += 1
        else:
            m[a[i]] = 1
 
    # mx store the frequency of element which
    # occurs most in array .
    mx = 0
 
    # In this loop we calculate the maximum
    # frequency and store it in variable mx.
    for i in range(n):
        if mx < m[a[i]]:
            mx = m[a[i]]
 
    # By swapping we can adjust array only
    # when the frequency of the element
    # which occurs most is less than or
    # equal to (n + 1)/2 .
    if mx > (n+1) // 2:
        print("NO")
    else:
        print("YES")
 
 
# Driver Code
if __name__ == "__main__":
    a = [7, 7, 7, 7]
    n = len(a)
    distantAdjacentElement(a, n)
 
# This code is contributed by
# sanjeev2552

C#

// C# program to check if we can make
// neighbors distinct.
using System;
using System.Collections.Generic;
 
class GFG {
 
public static void distinctAdjacentElement(int[] a, int n)
{
    // map used to count the frequency
    // of each element occurring in the
    // array
    Dictionary<int, int> m = new Dictionary<int, int>();
 
    // In this loop we count the frequency
    // of element through map m .
    for (int i = 0; i < n; ++i)
    {
 
        // checks if map already
        // contains a[i] then
        // update the previous
        // value by incrementing
        // by 1
        if (m.ContainsKey(a[i]))
        {
            int x = m[a[i]] + 1;
            m[a[i]] = x;
        }
        else
        {
            m[a[i]] = 1;
        }
 
    }
 
    // mx store the frequency
    // of element which
    // occurs most in array .
    int mx = 0;
 
    // In this loop we calculate
    // the maximum frequency and
    // store it in variable mx.
    for (int i = 0; i < n; ++i)
    {
        if (mx < m[a[i]])
        {
            mx = m[a[i]];
        }
    }
 
    // By swapping we can adjust array only
    // when the frequency of the element
    // which occurs most is less than or
    // equal to (n + 1)/2 .
    if (mx > (n + 1) / 2)
    {
        Console.WriteLine("NO");
    }
    else
    {
        Console.WriteLine("YES");
    }
}
 
    // Main Method
    public static void Main(string[] args)
    {
        int[] a = new int[] {7, 7, 7, 7};
        int n = 4;
        distinctAdjacentElement(a, n);
    }
}
 
// This code is contributed
// by Shrikant13

Java

// Java program to check if we can make
// neighbors distinct.
import java.io.*;
import java.util.HashMap;
import java.util.Map;
class GFG {
 
static void distinctAdjacentElement(int a[], int n)
{
// map used to count the frequency
// of each element occurring in the
// array
HashMap<Integer,Integer> m = new HashMap<Integer,
Integer>();
 
// In this loop we count the frequency
// of element through map m .
for (int i = 0; i < n; ++i){
 
// checks if map already contains a[i] then
// update the previous value by incrementing
// by 1
if(m.containsKey(a[i])){
int x = m.get(a[i]) + 1;
m.put(a[i],x);
}
else{
m.put(a[i],1);
}
 
}
 
// mx store the frequency of element which
// occurs most in array .
int mx = 0;
 
// In this loop we calculate the maximum
// frequency and store it in variable mx.
for (int i = 0; i < n; ++i)
if (mx < m.get(a[i]))
mx = m.get(a[i]);
 
// By swapping we can adjust array only
// when the frequency of the element
// which occurs most is less than or
// equal to (n + 1)/2 .
if (mx > (n + 1) / 2)
System.out.println("NO");
else
System.out.println("YES");
}
 
// Driver program to test the above function
public static void main (String[] args) {
int a[] = { 7, 7, 7, 7 };
int n = 4;
distinctAdjacentElement(a, n);
}
}
// This code is contributed by Amit Kumar

Javascript

<script>
 
// JavaScript program to check if we can make
// neighbors distinct.
 
 
function distinctAdjacentElement(a, n) {
    // map used to count the frequency
    // of each element occurring in the
    // array
    let m = new Map();
 
    // In this loop we count the frequency
    // of element through map m .
    for (let i = 0; i < n; ++i) {
        m[a[i]]++;
        if (m.has(a[i])) {
            m.set(a[i], m.get(a[i]) + 1)
        } else {
            m.set(a[i], 1)
        }
    }
    // mx store the frequency of element which
    // occurs most in array .
    let mx = 0;
 
    // In this loop we calculate the maximum
    // frequency and store it in variable mx.
    for (let i = 0; i < n; ++i)
        if (mx < m.get(a[i]))
            mx = m.get(a[i]);
 
    // By swapping we can adjust array only
    // when the frequency of the element
    // which occurs most is less than or
    // equal to (n + 1)/2 .
    if (mx > Math.floor((n + 1) / 2))
        document.write("NO" + "<br>");
    else
        document.write("YES<br>");
}
 
// Driver program to test the above function
 
let a = [7, 7, 7, 7];
let n = a.length;
distinctAdjacentElement(a, n);
 
</script>
Producción

NO

Complejidad temporal: O(N)
Espacio auxiliar: O(N)

Este artículo es una contribución de Surya Priy . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *