上得廳堂,下得廚房,寫得代碼,翻得圍牆,歡迎來到睿不可擋的每日一小練!
題目:等值數目
内容:已知兩個整數數組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語言名題精選百則》