计算一个数组中相同元素对的数目
来源:互联网 发布:java防止重复提交 编辑:程序博客网 时间:2024/04/30 14:38
原文地址:Count of index pairs with equal elements in an array
已知一个数组有n个元素,任务是计算下标arr[i] = arr[j]
并且i != j
。
例子:
输入:arr[] = {1, 1, 2}输出:1因为arr[0] = arr[1],所以下标对是(0, 1)输入:arr[] = {1, 1, 1}输出:3因为arr[0] = arr[1],所以下标对是(0, 1),(0, 2)与(1, 2)输入:arr[] = {1, 2, 3}输出:0
方法一(暴力法):
对于每个下标i,找到在数组中它后面的与其值相同的元素。下面是C++的实现:
// C++ program to count of pairs with equal// elements in an array.#include<bits/stdc++.h>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 Programint main(){ int arr[] = { 1, 1, 2 }; int n = sizeof(arr)/sizeof(arr[0]); cout << countPairs(arr, n) << endl; return 0;}
输出:
1
时间复杂度:
方法二 (更高效一些):
这个方法是计算每个元素出现的频率,然后找到相同元素对的数目。假设一个元素arr[i] = arr[j] = x
选择
下面是这个方法的C++实现:
// C++ program to count of index pairs with// equal elements in an array.#include<bits/stdc++.h>using namespace std;// Return the number of pairs with equal values.int countPairs(int arr[], int n){ unordered_map<int, int> 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 Programint main(){ int arr[] = {1, 1, 2}; int n = sizeof(arr)/sizeof(arr[0]); cout << countPairs(arr, n) << endl; return 0;}
输出:
1
时间复杂度:O(n)
来源:
http://stackoverflow.com/questions/26772364/efficient-algorithm-for-counting-number-of-pairs-of-identical-elements-in-an-arr#comment42124861_26772516
0 0
- 计算一个数组中相同元素对的数目
- 计算数组中相同元素的个数,以及数组总的元素数(重复元素算一个)
- 如何取一个数组中相同元素的位置
- 【一个小实验】找出两个数组中相同的元素
- 判断一个字符串数组中相同和不同的元素
- 关于删除数组中相同元素的一个小技巧
- 统计一个数组中相同元素个数
- 快速找出数组中元素数目超出一半的元素
- 查找数组中相同的元素
- 两个数组中找出相同的元素
- 查询数组中相同元素的个数
- 找出两个数组中相同的元素
- 删除数组中相同的元素
- 删除数组中相同的元素
- 数组中去掉相同的元素, 排序
- JavaShowAlgorithm-找出数组中相同的元素
- 两个数组,大小都为n,两个数组里有相同的元素,设计一个算法,找到两个数组中相同的元素
- PHP获取数组中元素的数目——count()
- Android Sensor感应器介绍(三)获取用户移动方向,指南针原理
- 存储过程返回参数的方法(也是执行动态sql 实现列名成为变量的功能)
- AtCoder Grant Contest 010 C - Cleaning dfs+逻辑+dp思想
- 关于DOM的初步认识
- 数据结构用递归和非递归方法实现二分查找法
- 计算一个数组中相同元素对的数目
- MQTT初体验mosquitto的安装和使用
- sun.misc.BASE64Encoder找不到jar包的解决方法
- POJ 1837 Balance DP 二维背包
- flume学习(一)——安装和一个简单的netcat程序
- 一次生产事故的优化经历
- 查看linux的ftp服务是否安装
- 波动数列 解题报告
- SAP成本会计分录大全