在 C++ 中查找与其他数组元素频率不同的元素
假设我们有一个包含 N 个数字的数组,其中数组中的每个元素都出现相同次数(m 次,这也已给出),除了一个元素,我们需要找到这个元素。
因此,如果输入类似于 A = [6, 2, 7, 2, 2, 6, 6],m = 3,则输出将为 7。
为了解决这个问题,我们将遵循以下步骤:
INT_SIZE := 整型变量大小的 8 倍
定义一个大小为 INT_SIZE 的数组 count,并填充为 0
初始化 i := 0,当 i < INT_SIZE 时,更新(i 加 1),执行:
初始化 j := 0,当 j < size 时,更新(j 加 1),执行:
如果 (arr[j] AND 2^i) 不等于 0,则:
count[i] := count[i] + 1
res := 0
初始化 i := 0,当 i < INT_SIZE 时,更新(i 加 1),执行:
res := res + ((count[i] mod m) * 2^i)
返回 res
示例
让我们看看以下实现以获得更好的理解:
#include <bits/stdc++.h>
using namespace std;
int selectUnique(unsigned int arr[], int size, int m){
int INT_SIZE = 8 * sizeof(unsigned int);
int count[INT_SIZE];
memset(count, 0, sizeof(count));
for(int i = 0; i < INT_SIZE; i++)
for(int j = 0; j < size; j++)
if((arr[j] & (1 << i)) != 0)
count[i] += 1;
unsigned res = 0;
for(int i = 0; i < INT_SIZE; i++)
res += (count[i] % m) * (1 << i);
return res;
}
main(){
unsigned int arr[] = { 6, 2, 5, 2, 2, 6, 6 };
int size = sizeof(arr) / sizeof(arr[0]);
int m = 3;
cout << selectUnique(arr, size, m);
}输入
{ 6, 2, 5, 2, 2, 6, 6 }输出
5
广告
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP