📌  相关文章
📜  数组中具有相等元素的索引对的计数

📅  最后修改于: 2021-04-27 09:10:45             🧑  作者: Mango

给定n个元素的数组。任务是计算索引(i,j)的总数,以使arr [i] = arr [j]和i!= j
例子 :

Input : arr[] = {1, 1, 2}
Output : 1
As arr[0] = arr[1], the pair of indices is (0, 1)

Input : arr[] = {1, 1, 1}
Output : 3
As arr[0] = arr[1], the pair of indices is (0, 1), 
(0, 2) and (1, 2)

Input : arr[] = {1, 2, 3}
Output : 0

方法1(蛮力):
对于每个索引i,在其后查找具有与arr [i]相同的值的元素。以下是此方法的实现:

C++
// C++ program to count of pairs with equal
// elements in an array.
#include
using namespace std;
 
// Return the number of pairs with equal
// values.
int countPairs(int arr[], int n)
{
    int ans = 0;
 
    // for each index i and j
    for (int i = 0; i < n; i++)
        for (int j = i+1; j < n; j++)
 
            // finding the index with same
            // value but different index.
            if (arr[i] == arr[j])
                ans++;
    return ans;
}
 
// Driven Program
int main()
{
    int arr[] = { 1, 1, 2 };
    int n = sizeof(arr)/sizeof(arr[0]);
    cout << countPairs(arr, n) << endl;
    return 0;
}


Java
// Java program to count of pairs with equal
// elements in an array.
class GFG {
         
    // Return the number of pairs with equal
    // values.
    static int countPairs(int arr[], int n)
    {
        int ans = 0;
     
        // for each index i and j
        for (int i = 0; i < n; i++)
            for (int j = i+1; j < n; j++)
     
                // finding the index with same
                // value but different index.
                if (arr[i] == arr[j])
                    ans++;
        return ans;
    }
     
    //driver code
    public static void main (String[] args)
    {
        int arr[] = { 1, 1, 2 };
        int n = arr.length;
         
        System.out.println(countPairs(arr, n));
    }
}
 
// This code is contributed by Anant Agarwal.


Python3
# Python3 program to
# count of pairs with equal
# elements in an array.
 
# Return the number of
# pairs with equal values.
def countPairs(arr, n):
 
    ans = 0
 
    # for each index i and j
    for i in range(0 , n):
        for j in range(i + 1, n):
 
            # finding the index
            # with same value but
            # different index.
            if (arr[i] == arr[j]):
                ans += 1
    return ans
 
# Driven Code
arr = [1, 1, 2 ]
n = len(arr)
print(countPairs(arr, n))
 
# This code is contributed
# by Smitha


C#
// C# program to count of pairs with equal
// elements in an array.
using System;
 
class GFG {
         
    // Return the number of pairs with equal
    // values.
    static int countPairs(int []arr, int n)
    {
        int ans = 0;
     
        // for each index i and j
        for (int i = 0; i < n; i++)
            for (int j = i+1; j < n; j++)
     
                // finding the index with same
                // value but different index.
                if (arr[i] == arr[j])
                    ans++;
        return ans;
    }
     
    // Driver code
    public static void Main ()
    {
        int []arr = { 1, 1, 2 };
        int n = arr.Length;
         
        Console.WriteLine(countPairs(arr, n));
    }
}
 
// This code is contributed by anuj_67.


PHP


Javascript


C++
// C++ program to count of index pairs with
// equal elements in an array.
#include
using namespace std;
 
// Return the number of pairs with equal
// values.
int countPairs(int arr[], int n)
{
    unordered_map mp;
 
    // Finding frequency of each number.
    for (int i = 0; i < n; i++)
        mp[arr[i]]++;
 
    // Calculating pairs of each value.
    int ans = 0;
    for (auto it=mp.begin(); it!=mp.end(); it++)
    {
        int count = it->second;
        ans += (count * (count - 1))/2;
    }
 
    return ans;
}
 
// Driven Program
int main()
{
    int arr[] = {1, 1, 2};
    int n = sizeof(arr)/sizeof(arr[0]);
    cout << countPairs(arr, n) << endl;
    return 0;
}


Java
// Java program to count of index pairs with
// equal elements in an array.
import java.util.*;
 
class GFG {
 
    public static int countPairs(int arr[], int n)
    {
        //A method to return number of pairs with
        // equal values
         
        HashMap hm = new HashMap<>();
         
        // Finding frequency of each number.
        for(int i = 0; i < n; i++)
        {
        if(hm.containsKey(arr[i]))
            hm.put(arr[i],hm.get(arr[i]) + 1);
        else
            hm.put(arr[i], 1);
        }
        int ans=0;
         
        // Calculating count of pairs with equal values
        for(Map.Entry it : hm.entrySet())
        {
            int count = it.getValue();
            ans += (count * (count - 1)) / 2;
        }
        return ans;
    }
     
    // Driver code
    public static void main(String[] args)
    {
        int arr[] = new int[]{1, 2, 3, 1};
        System.out.println(countPairs(arr,arr.length));
    }
}
 
// This Code is Contributed
// by Adarsh_Verma


Python3
# Python3 program to count of index pairs
# with equal elements in an array.
import math as mt
 
# Return the number of pairs with
# equal values.
def countPairs(arr, n):
 
    mp = dict()
 
    # Finding frequency of each number.
    for i in range(n):
        if arr[i] in mp.keys():
            mp[arr[i]] += 1
        else:
            mp[arr[i]] = 1
             
    # Calculating pairs of each value.
    ans = 0
    for it in mp:
        count = mp[it]
        ans += (count * (count - 1)) // 2
    return ans
 
# Driver Code
arr = [1, 1, 2]
n = len(arr)
print(countPairs(arr, n))
 
# This code is contributed by mohit kumar 29


C#
// C# program to count of index pairs with
// equal elements in an array.
using System;
using System.Collections.Generic;
 
class GFG
{
     
    // Return the number of pairs with
    // equal values.
    public static int countPairs(int []arr, int n)
    {
        // A method to return number of pairs
        // with equal values
        Dictionary hm = new Dictionary();
         
        // Finding frequency of each number.
        for(int i = 0; i < n; i++)
        {
            if(hm.ContainsKey(arr[i]))
            {
                int a = hm[arr[i]];
                hm.Remove(arr[i]);
                hm.Add(arr[i], a + 1);
            }
            else
                hm.Add(arr[i], 1);
        }
        int ans = 0;
         
        // Calculating count of pairs with
        // equal values
        foreach(var it in hm)
        {
            int count = it.Value;
            ans += (count * (count - 1)) / 2;
        }
        return ans;
    }
     
    // Driver code
    public static void Main()
    {
        int []arr = new int[]{1, 2, 3, 1};
        Console.WriteLine(countPairs(arr,arr.Length));
    }
}
 
// This code is contributed by 29AjayKumar


输出 :

1

时间复杂度:O(n 2 )
方法2(有效方法):
想法是计算每个数字的频率,然后找到具有相等元素的对的数量。假设数字x在索引i 1 ,i 2 ,…,i k处出现k次。然后选择将被计为1对的任意两个索引i x和i y 。同样,i y和i x也可以成对。因此,选择n C 2是对数,以使arr [i] = arr [j] = x。
以下是此方法的实现:

C++

// C++ program to count of index pairs with
// equal elements in an array.
#include
using namespace std;
 
// Return the number of pairs with equal
// values.
int countPairs(int arr[], int n)
{
    unordered_map mp;
 
    // Finding frequency of each number.
    for (int i = 0; i < n; i++)
        mp[arr[i]]++;
 
    // Calculating pairs of each value.
    int ans = 0;
    for (auto it=mp.begin(); it!=mp.end(); it++)
    {
        int count = it->second;
        ans += (count * (count - 1))/2;
    }
 
    return ans;
}
 
// Driven Program
int main()
{
    int arr[] = {1, 1, 2};
    int n = sizeof(arr)/sizeof(arr[0]);
    cout << countPairs(arr, n) << endl;
    return 0;
}

Java

// Java program to count of index pairs with
// equal elements in an array.
import java.util.*;
 
class GFG {
 
    public static int countPairs(int arr[], int n)
    {
        //A method to return number of pairs with
        // equal values
         
        HashMap hm = new HashMap<>();
         
        // Finding frequency of each number.
        for(int i = 0; i < n; i++)
        {
        if(hm.containsKey(arr[i]))
            hm.put(arr[i],hm.get(arr[i]) + 1);
        else
            hm.put(arr[i], 1);
        }
        int ans=0;
         
        // Calculating count of pairs with equal values
        for(Map.Entry it : hm.entrySet())
        {
            int count = it.getValue();
            ans += (count * (count - 1)) / 2;
        }
        return ans;
    }
     
    // Driver code
    public static void main(String[] args)
    {
        int arr[] = new int[]{1, 2, 3, 1};
        System.out.println(countPairs(arr,arr.length));
    }
}
 
// This Code is Contributed
// by Adarsh_Verma

Python3

# Python3 program to count of index pairs
# with equal elements in an array.
import math as mt
 
# Return the number of pairs with
# equal values.
def countPairs(arr, n):
 
    mp = dict()
 
    # Finding frequency of each number.
    for i in range(n):
        if arr[i] in mp.keys():
            mp[arr[i]] += 1
        else:
            mp[arr[i]] = 1
             
    # Calculating pairs of each value.
    ans = 0
    for it in mp:
        count = mp[it]
        ans += (count * (count - 1)) // 2
    return ans
 
# Driver Code
arr = [1, 1, 2]
n = len(arr)
print(countPairs(arr, n))
 
# This code is contributed by mohit kumar 29

C#

// C# program to count of index pairs with
// equal elements in an array.
using System;
using System.Collections.Generic;
 
class GFG
{
     
    // Return the number of pairs with
    // equal values.
    public static int countPairs(int []arr, int n)
    {
        // A method to return number of pairs
        // with equal values
        Dictionary hm = new Dictionary();
         
        // Finding frequency of each number.
        for(int i = 0; i < n; i++)
        {
            if(hm.ContainsKey(arr[i]))
            {
                int a = hm[arr[i]];
                hm.Remove(arr[i]);
                hm.Add(arr[i], a + 1);
            }
            else
                hm.Add(arr[i], 1);
        }
        int ans = 0;
         
        // Calculating count of pairs with
        // equal values
        foreach(var it in hm)
        {
            int count = it.Value;
            ans += (count * (count - 1)) / 2;
        }
        return ans;
    }
     
    // Driver code
    public static void Main()
    {
        int []arr = new int[]{1, 2, 3, 1};
        Console.WriteLine(countPairs(arr,arr.Length));
    }
}
 
// This code is contributed by 29AjayKumar

输出 :

1