Check if all duplicate elements in the Array are adjacent or not
Last Updated :
03 Aug, 2022
Given an array arr[]. The task is to check whether duplicate elements in arr[] are contiguous or not.
Examples:
Input: arr[] = {1, 2, 3, 4, 5, 6}
Output: Yes
Explanation: There is no duplicate element in arr[] so
there is no need to check anything and answer is Yes.
Input: arr[] = {1, 2, 2, 4}
Output: Yes
Explanation: 2 is occurring 2 times and it is contiguous. Hence, answer is Yes.
Input: arr[] = {1, 2, 3, 2, 4}
Output: No
Explanation: There is a gap between 2's and 3 is between two 2's. Therefore, the answer is No.
Approach:
This problem can be solved by using HashMaps. Follow the steps below to solve the given problem.
- Use maps to store the visited elements.
- First, mark the first element on the map.
- Traverse the array arr[] from 1 to N-1. where N is the size of arr[].
- If the current element matches the previous element means there is a cycle of one element repeating so simply continue the loop.
- If the current element is already marked in the map return “No”.
- Mark the current element in the map.
- If the function reaches here means there are all contiguous elements so return “Yes”.
Below is the implementation of the above approach.
C++14
#include <bits/stdc++.h>
using namespace std;
string checkContiguous( int * arr, int & n)
{
int i;
unordered_map< int , bool > visited;
visited.clear();
visited.insert({ arr[0], 1 });
for (i = 1; i < n; i++) {
if (arr[i] == arr[i - 1])
continue ;
else if (visited[arr[i]])
return "No" ;
visited[arr[i]] = 1;
}
return "Yes" ;
}
int main()
{
int arr[] = { 2, 4, 5, 5, 3, 5 };
int N = sizeof (arr) / sizeof (arr[0]);
cout << checkContiguous(arr, N);
return 0;
}
|
Java
import java.io.*;
class GFG {
static String checkContiguous( int [] arr, int n)
{
int i;
int [] visited = new int [n];
for (i = 1 ; i < n; i++) {
if (arr[i] == arr[i - 1 ])
continue ;
else if (visited[arr[i]] == 0 )
return "No" ;
visited[arr[i]] = 1 ;
}
return "Yes" ;
}
public static void main(String[] args)
{
int arr[] = { 2 , 4 , 5 , 5 , 3 , 5 };
int N = arr.length;
System.out.println(checkContiguous(arr, N));
}
}
|
Python3
def checkContiguous (arr, n):
i = None
visited = [ 0 ] * n;
for i in range ( 1 , n):
if (arr[i] = = arr[i - 1 ]):
continue ;
elif (visited[arr[i]] = = 0 ):
return "No" ;
visited[arr[i]] = 1 ;
return "Yes" ;
arr = [ 2 , 4 , 5 , 5 , 3 , 5 ];
N = len (arr)
print (checkContiguous(arr, N));
|
C#
using System;
class GFG {
static String checkContiguous( int [] arr, int n)
{
int i;
int [] visited = new int [n];
for (i = 1; i < n; i++) {
if (arr[i] == arr[i - 1])
continue ;
else if (visited[arr[i]] == 0)
return "No" ;
visited[arr[i]] = 1;
}
return "Yes" ;
}
public static void Main()
{
int [] arr = { 2, 4, 5, 5, 3, 5 };
int N = arr.Length;
Console.WriteLine(checkContiguous(arr, N));
}
}
|
Javascript
<script>
const checkContiguous = (arr, n) => {
let i;
let visited = {};
visited[arr[0]] = 1;
for (i = 1; i < n; i++) {
if (arr[i] == arr[i - 1])
continue ;
else if (visited[arr[i]])
return "No" ;
visited[arr[i]] = 1;
}
return "Yes" ;
}
let arr = [2, 4, 5, 5, 3, 5];
let N = arr.length;
document.write(checkContiguous(arr, N));
</script>
|
Time Complexity: O(N) // only one traversal of the array is required
Auxiliary Space: O(N) //unordered map takes space equal to the length of the array N
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...