アルゴリズムの適切な数のペアの数

整数配列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;
}

おすすめ

転載: blog.csdn.net/Gunanhuai/article/details/109126169