找出兩個數組中滿足給定和的數對

/*******************************************************************************************************************************************
3.找出兩個數組中滿足給定和的數對
問題描述:有兩個數組arr1和arr2,兩個數組均已經排好序,現在要找出這樣的x和y使得x+y=sum,其中sum已知,x是arr1中某個元素,y是arr2中的某個元素。
解決方案:既然數組arr1和arr2中的元素已經排好序了,那麼問題就簡單了不少。假設arr1[i] + arr2[j] > sum,若arr1下標不變,那麼要找到滿足條件的x和y,
只能取arr2中下標< j 的元素和arr1[i]相加,結果纔可能等於sum;假設arr1[i] + arr2[j] < sum,若arr2的下標不變,那麼要找到滿足條件的x和y,
只能取arr1中下標 > i 的元素和arr2[j]相加,結果纔可能等於sum。因此我們可以設置兩個指針 i 和 j ,分別指向arr1的開始位置和arr2結束位置,
這時 i 只能不斷變大,j 只能不斷變小,直到超過了數組的範圍。通過代碼更好理解,看代碼吧~~時間複雜度是O(n+m),n和m分別是arr1和arr2的大小。
************************************************************************************************************************************************/

 

bool getthesum(int arr1[], int arr2[], int length1, int length2, int sum)
{
	bool find = false;
	int i = 0;
	int j = length2 - 1;
	while( i < length1 && j >= 0)
	{
		if (arr1[i] + arr2[j] < sum)
		{
			i++;
		}
		else if(arr1[i] + arr2[j] > sum)
		{
			j--;
		}
		else if(arr1[i] + arr2[j] == sum)
		{
			find = true;
			printf("arr1[%d]=%d and arr2[%d]=%d equals to %d\n", i, arr1[i], j, arr2[j], sum);
			i++;
			j--;
		}
	}
	return find;
}




int _tmain(int argc, _TCHAR* argv[])
{
	int arr1[7] = {1, 2, 3, 4, 5, 6, 7};
	int arr2[7] = {3, 4, 5, 6, 7, 8, 9};
	getthesum(arr1, arr2, 7, 7, 12);
	getchar();
	return 0;
}


 

發佈了78 篇原創文章 · 獲贊 8 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章