Skip to content
Related Articles

Related Articles

Save Article
Improve Article
Save Article
Like Article

Check whether (i,j) exists such that arr[i] != arr[j] and arr[arr[i]] is equal to arr[arr[j]]

  • Difficulty Level : Basic
  • Last Updated : 14 Apr, 2021

Given an array A[]. The task is to determine if it is possible to choose two indices ‘i’ and ‘j’ such that the below conditions gets satisfied:-

  1. A[i] is not equal to A[j].
  2. A[A[i]] is equal to A[A[j]].

Note: The value of the elements in an array is less than the value of N i.e. For every i, arr[i] < N. 
Examples: 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

Input: N = 4, A[] = {1, 1, 2, 3}
Output: Yes
As A[3] != to A[1] but A[A[3]] == A[A[1]]

Input: N = 4, A[] = {2, 1, 3, 3}
Output: No
As A[A[3]] == A[A[4]] but A[3] == A[4]

Approach:  



  1. Start traversing the Array Arr[] by running two loops.
  2. The variable i point at the index 0 and variable j point to the next of i.
  3. If Arr[i] is not equal to Arr[j] then check if Arr[Arr[i] – 1] is equal to Arr[Arr[j] – 1]. If yes then return true. 
    Else check Arr[Arr[i]- 1] and Arr[Arr[j] – 1] for other indices also.
  4. Repeat the above step till all the elements/index gets traversed.
  5. If no such indices found return false.

Below is the implementation of the above approach: 

C++




// C++ implementation of the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function that will tell whether
// such Indices present or Not.
bool checkIndices(int Arr[], int N)
{
 
    for (int i = 0; i < N - 1; i++) {
        for (int j = i + 1; j < N; j++) {
 
            // Checking 1st condition i.e whether
            // Arr[i] equal to Arr[j] or not
            if (Arr[i] != Arr[j]) {
 
                // Checking 2nd condition i.e whether
                // Arr[Arr[i]] equal to Arr[Arr[j]] or not.
                if (Arr[Arr[i] - 1] == Arr[Arr[j] - 1])
                    return true;
            }
        }
    }
 
    return false;
}
 
// Driver Code
int main()
{
    int Arr[] = { 3, 2, 1, 1, 4 };
    int N = sizeof(Arr) / sizeof(Arr[0]);
 
    // Calling function.
    checkIndices(Arr, N) ? cout << "Yes"
                         : cout << "No";
 
    return 0;
}

Java




// Java implementation of the above approach
 
// Function that calculates marks.
class GFG
{
    static boolean checkIndices(int Arr[], int N)
    {
   
        for (int i = 0; i < N - 1; i++) {
            for (int j = i + 1; j < N; j++) {
   
                // Checking 1st condition i.e whether
                // Arr[i] equal to Arr[j] or not
                if (Arr[i] != Arr[j]) {
     
                    // Checking 2nd condition i.e whether
                    // Arr[Arr[i]] equal to Arr[Arr[j]] or not.
                    if (Arr[Arr[i] - 1] == Arr[Arr[j] - 1])
                        return true;
                }
            }
        }
        return false;
    }
 
    // Driver code
    public static void main(String args[])
    {
        int Arr[] = { 3, 2, 1, 1, 4 };
        int N = Arr.length;
         
        if(checkIndices(Arr, N))
            System.out.println("Yes");
        else
            System.out.println("No");
    }
}
 
// This code is Contributed by
// Naman_Garg

Python 3




# Python 3 implementation of the
# above approach
 
# Function that will tell whether
# such Indices present or Not.
def checkIndices(Arr, N):
 
    for i in range(N - 1):
        for j in range(i + 1, N):
 
            # Checking 1st condition i.e whether
            # Arr[i] equal to Arr[j] or not
            if (Arr[i] != Arr[j]):
 
                # Checking 2nd condition i.e whether
                # Arr[Arr[i]] equal to Arr[Arr[j]] or not.
                if (Arr[Arr[i] - 1] == Arr[Arr[j] - 1]):
                    return True
 
    return False
 
# Driver Code
if __name__ == "__main__":
     
    Arr = [ 3, 2, 1, 1, 4 ]
    N =len(Arr)
 
    # Calling function.
    if checkIndices(Arr, N):
        print("Yes"
    else:
        print("No")
 
# This code is contributed by ita_c

C#




// C# implementation of the above approach
using System;
 
class GFG
{
     
// Function that calculates marks.
static bool checkIndices(int []Arr, int N)
{
    for (int i = 0; i < N - 1; i++)
    {
        for (int j = i + 1; j < N; j++)
        {
 
            // Checking 1st condition i.e whether
            // Arr[i] equal to Arr[j] or not
            if (Arr[i] != Arr[j])
            {
 
                // Checking 2nd condition i.e
                // whether Arr[Arr[i]] equal
                // to Arr[Arr[j]] or not.
                if (Arr[Arr[i] - 1] == Arr[Arr[j] - 1])
                    return true;
            }
        }
    }
    return false;
}
 
// Driver code
static public void Main ()
{
    int []Arr = { 3, 2, 1, 1, 4 };
    int N = Arr.Length;
     
    if(checkIndices(Arr, N))
        Console.WriteLine("Yes");
    else
        Console.WriteLine("No");
}
}
 
// This code is Contributed by Sachin

PHP




<?php
// PHP implementation of the
// above approach
 
// Function that will tell whether
// such Indices present or Not.
function checkIndices($Arr, $N)
{
    for ($i = 0; $i < $N - 1; $i++)
    {
        for ($j = $i + 1;
                  $j < $N; $j++)
        {
 
            // Checking 1st condition i.e
            // whether Arr[i] equal to
            // Arr[j] or not
            if ($Arr[$i] != $Arr[$j])
            {
 
                // Checking 2nd condition i.e
                // whether Arr[Arr[i]] equal to
                // Arr[Arr[j]] or not.
                if ($Arr[$Arr[$i] - 1] == $Arr[$Arr[$j] - 1])
                    return true;
            }
        }
    }
 
    return false;
}
 
// Driver Code
$Arr = array(3, 2, 1, 1, 4);
$N = sizeof($Arr);
 
// Calling function.
if(checkIndices($Arr, $N))
    echo "Yes";
else
    echo "No";
 
// This code is contributed
// by Akanksha Rai
?>

Javascript




<script>
 
// Javascript implementation of the above approach
 
// Function that will tell whether
// such Indices present or Not.
function checkIndices(Arr, N)
{
 
    for (var i = 0; i < N - 1; i++) {
        for (var j = i + 1; j < N; j++) {
 
            // Checking 1st condition i.e whether
            // Arr[i] equal to Arr[j] or not
            if (Arr[i] != Arr[j]) {
 
                // Checking 2nd condition i.e whether
                // Arr[Arr[i]] equal to Arr[Arr[j]] or not.
                if (Arr[Arr[i] - 1] == Arr[Arr[j] - 1])
                    return true;
            }
        }
    }
 
    return false;
}
 
// Driver Code
var Arr = [ 3, 2, 1, 1, 4 ];
var N = Arr.length;
 
// Calling function.
checkIndices(Arr, N) ? document.write( "Yes")
                    : document.write( "No");
 
 
</script>
Output: 
Yes

 

Time Complexity: O(N2)

Auxiliary Space: O(1)




My Personal Notes arrow_drop_up
Recommended Articles
Page :