天天看點

每日一小練——等值數目

上得廳堂,下得廚房,寫得代碼,翻得圍牆,歡迎來到睿不可擋的每日一小練!

題目:等值數目

内容:已知兩個整數數組f[]與g[],它們的元素都已經從小到大排列好,而且兩個數組中的元素都各不相同。例如,f[]中有1,3,4,7,9,而g[]中有3,5,7,8,10。試編寫程式算出這兩個數組之間有多少組相同的元素。就上例而言,f[2]和g[1]為3是一組;f[4]和g[3]為8是一組。是以共有兩組。

經過了前兩天的編寫,我覺得程式不具有代表性,是以我打算以後把核心算法的部分寫出函數的形式,這樣看起來更直覺。

我的解法:上來沒多想,打開vs2013就敲了起來,問題果然很簡單,分分鐘就超神。。奧,不對就解決了!經過昨天題目的啟發,我上了就考慮了時間複雜度的問題,是以今天直接就達到了n的水準,說明我确實是進步了O(∩_∩)O~!

#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	int equals(int f[], int g[],int fLength,int gLength);
	int Num = 0;
	int f[5] = { 1, 3, 4, 7, 9 };
	int g[5] = { 3, 5, 7, 8, 10 };
	Num = equals(f,g,5,5);
	cout << "兩個數組中的等值數目為:";
	cout <<  Num << endl;
	getchar();
	return 0;
}

int equals(int f[], int g[],int fLength,int gLength)
{
	int Num = 0;
	int index_f = 0;
	int index_g = 0;
	while (index_f < fLength && index_g < gLength)
	{
		if (f[index_f] == g[index_g])
		{
			Num++;
			index_f++;
		}
		else if (f[index_f] < g[index_g])
			index_f++;
		else
			index_g++;
	}
	return Num;
}
           

實驗結果為:

每日一小練——等值數目

歡迎大家加入每日一小練,嘿嘿!

每天練一練,日久見功夫,加油!

            -End-

參考文獻:《c語言名題精選百則》

繼續閱讀