Median of Two Sorted Arrays

題目要求是求出兩個已排序的數組的中位數,如果兩個數組的總的個數爲偶數,則返回中間兩個數字的平均數。

思路:

解題思路就是根據歸併排序的思想,利用歸併排序中合併兩個已排序數組的方法。聲明count變量,在兩個數組中沒選出一個數的時候,count++,直到count等於中位數所在的位置即可。以下是代碼過程:
1. 極端情況,兩個數字都爲空,返回-1;
2. 根據兩個數組的size()確定中位數的位置min_pos,聲明兩個數組對應的位置表示變量flag_a和flag_b;
3. 在第一個循環體中,從頭開始在兩個數組中選取數值較小的值,被選中的數組位置變量加1, 同時count++。result1與result2用來標示中位數結果的位置,如果中位數的位置在奇數位,則result1標示當前的中位數,若爲偶數,這中位數是(result1+result2)/2。
4. 有一個數組已經遍歷完畢後,第一個循環體退出,進入第二第三個循環體,把兩個數組中剩餘的部分繼續處理;
5. 返回結果。



double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
	if (nums1.size()==0 && nums2.size()==0)
		return -1;

	int a_size = nums1.size();
	int b_size = nums2.size();
	int min_pos = (a_size+b_size)%2 ? (a_size+b_size+1)/2 : 1+(a_size+b_size)/2;
	int result1, result2;
	result1 = result2 = 0;
	int flag_a, flag_b;
	flag_a = flag_b = 0;
	int count = 0;

	for (int i=0; i<a_size+b_size && flag_a<a_size && flag_b<b_size; i++)
	{
		if (count == min_pos)
			break;

		if (nums1[flag_a] <= nums2[flag_b])
		{
			result2 = result1;
			result1 = nums1[flag_a];
			count++;
			flag_a++;
		} else {
			result2 = result1;
			result1 = nums2[flag_b];
			count++;
			flag_b++;
		}
	}

	while (flag_a < a_size)
	{
		if (count == min_pos)
			break;

		result2 = result1;
		result1 = nums1[flag_a];
		count++;
		flag_a++;
	}
	while (flag_b < b_size)
	{
		if (count == min_pos)
			break;

		result2 = result1;
		result1 = nums2[flag_b];
		count++;
		flag_b++;
	}

	return (a_size+b_size)%2 ? result1*1.0 : (result1+result2)/2.0;
}





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章