首页 > 解决方案 > 数组中的重复对

问题描述

给定一个具有零索引和 N 个整数的数组 A,在数组中找到具有不同位置的相等元素。一对这样的索引(P,Q)0 <= P < Q < N这样这样A[P] = A[Q]

我的想法:

def function(arr, n) :  
    count = 0
    arr.sort()
    i = 0
    while i < (n-1) :  
        if (arr[i] == arr[i + 1]) : 
            count += 1
            i = i + 2
        else : 
            i += 1 
  
    return count 

两个问题:

  1. 如何避免计算第一个索引不小于第二个索引的元素?
  2. 如何构建一个输入只是数组的函数?(所以不是(arr,n))

标签: pythonarrayscount

解决方案


你可以做的类似于这样:

这是一种天真的方法:

def function(arr) :  
    count = 0
    n = len(arr)
    i = 0
    for i in range(n):
      for j in range(i+1,n):
        if arr[i]==arr[j]:
          count+=1
    return count

这是一种更优化的方法,您可以尝试:

def function(arr) :  
    mp = dict() 
    n = len(arr)
    for i in range(n): 
        if arr[i] in mp.keys(): 
            mp[arr[i]] += 1
        else: 
            mp[arr[i]] = 1

    ans = 0
    for it in mp: 
        count = mp[it] 
        ans += (count * (count - 1)) // 2
    return ans 

推荐阅读