整数配列numsを提供します。数のセット(i、j)がnums [i] == nums [j]およびi <jを満たす場合、それは適切な数のペアと見なすことができます。良いペアの数を返します。
例1:
入力:nums = [1,2,3,1,1,3]
出力:4
説明:適切な数のペアの4つのグループ、つまり(0,3)、(0,4)、(3,4)、(2,5)があり、添え字は0から始まります
例2:
入力:nums = [1,1,1,1]
出力:6
説明:配列内の数値の各グループは適切な数値ペアです
例3:
入力:nums = [1,2,3]
出力:0
アルゴリズム1:バブルソートと同様に、2層ループを使用して統計を直接トラバースします
void Fun(int *arr,int length)//o(n^2) o(1)
{
int num = 0;
for (int i = 0; i < length; ++i)
{
for (int j = i + 1; j < length; ++j)
{
if (arr[i] == arr[j])
{
++num;
}
}
}
printf("%d", num);
}
アルゴリズム2:+1に等しいイテレータを使用して配列を走査します
int GoodNumberPair(vector<int>& nums)
{
int cnt = 0;
for (auto i = nums.begin(); i != nums.end(); i++) // 使用迭代器遍历
{
for (auto j = i+1; j!=nums.end(); j++) // 遍历
{
if (*i == *j) cnt++; // 相等加一
}
}
return cnt;
}
// 打印数组
void Print(vector<int>& vec)
{
for (auto v : vec)
{
cout << v << " ";
}
cout << endl;
}
テストコード:
int main()
{
vector<int> test1{
1,2,3,1,1,3 };
auto ret1 = GoodNumberPair(test1);
vector<int> test2{
1,1,1,1 };
auto ret2 = GoodNumberPair(test2);
vector<int> test3{
1,2,3 };
auto ret3 = GoodNumberPair(test3);
Print(test1);
cout << ret1 << endl;
Print(test2);
cout << ret2 << endl;
Print(test3);
cout << ret3 << endl;
/*
int arr[] = {1,1,1,1};
int length = sizeof(arr) / sizeof(arr[0]);
Fun(arr, length);
*/
return 0;
}