LeetCode 4 尋找兩個有序陣列的中位數

2021-10-14 04:57:30 字數 1823 閱讀 5281

難度:困難。

直接合併兩個陣列後進行快排。

class

solution

intpartition

(vector<

int>

& nums,

int left,

int right)

swap

(nums, left, j)

;return j;

}void

quicksort

(vector<

int>

& nums,

int left,

int right)

}void

printvector

(vector<

int>

& nums)

}double

findmediansortedarrays

(vector<

int>

& nums1, vector<

int>

& nums2)

else

}// printvector(nums);

int len = nums.

size()

;if(len ==1)

return nums[0]

;quicksort

(nums,

0, len -1)

;// printvector(nums);

double mid =

0.0;

if(len %2)

else

return mid;}}

;

稍微簡化一丟丟,將快排改為尋找第k大元素

class

solution

intpartition

(vector<

int>

& nums,

int left,

int right)

swap

(nums, left, j)

;return j;

}int

kthselect

(vector<

int>

& nums,

int left,

int right,

int k)

else

return

kthselect

(nums, q +

1, right, k - j);}

void

printvector

(vector<

int>

& nums)

}double

findmediansortedarrays

(vector<

int>

& nums1, vector<

int>

& nums2)

else

}int len = nums.

size()

;if(len ==1)

return nums[0]

;double mid =

0.0;

if(len %2)

else

return mid;}}

;

分析歸納後得出解法

將問題轉換為一般問題:尋找兩個有序陣列的第k大數字。

找出兩個陣列a和b中的第k個數字,分別為a和b,比較兩者:

如果a > b,則第

k大數字在陣列a的前半段或陣列b的後半段;

如果a < b, 則第k大數字在陣列a的後半段或陣列b的前半段。

LeetCode 4 尋找兩個有序陣列的中位數

給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 和 nums2 不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0 示例 2 nums1 1,2 ...

LeetCode 4 尋找兩個有序陣列的中位數

給定兩個大小為 m 和 n 的有序陣列nums1和nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設nums1和nums2不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0示例 2 nums1 1,2 nums2 3,...

LeetCode4 尋找兩個有序陣列的中位數

給定兩個大小為 m 和 n 的有序陣列nums1和nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設nums1和nums2不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0示例 2 nums1 1,2 nums2 3,...