python - 数组中的重复对
问题描述
给定一个具有零索引和 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
两个问题:
- 如何避免计算第一个索引不小于第二个索引的元素?
- 如何构建一个输入只是数组的函数?(所以不是(arr,n))
解决方案
你可以做的类似于这样:
这是一种天真的方法:
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
推荐阅读
- java - android studio片段中的不兼容类型错误需要/找到问题
- c# - 将工具提示添加到数据网格视图上的特定列
- sql - 可以在 mariaDB 服务器中使用序列吗?
- javascript - 使用 ReactJS+ChartJS+SSE 的实时应用
- swift - 从 Rest API 获得响应后添加动态 GoogleMap Marker
- git - git - 我应该多久获得一次最新的更改
- python-3.x - Python - 机器学习模型的窗口大小
- powershell - If Else 语句在 powershell 中安装应用程序时出错
- ios - Flutter Option 模拟 IOS 中的 cmd+k 事件以打开/隐藏虚拟键盘
- html - 防止 chrome 自动文本对齐:正确的阿拉伯语