一、直接顺序遍历到所求位置
所谓求中位数,实际上就是求两个数组排序后的第 tar 个元素(当两数组长度之和m+n为奇数时,tar1 = (m+n)/2,当为偶数时,tar1 = (m+n)/2,tar2 = tar1+1)。
可以想到归并排序时归并的操作,cnt1和cnt2分别指向两个数组当前遍历到的位置,选择两数组中较小的元素,将其对应遍历指针cnt加一。
在这里需要注意的是,有可能出现
nums1 = {1,2}
nums2 = {3,4,5,6,7,8}
这样的情况,这时就需要对下边进行判断,当一个遍历指针已经越界的时候,就直接将另一个遍历指针加一。
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int len1 = nums1.size();
int len2 = nums2.size();
int tar1 = (len1+len2)/2;
int tar2 = tar1+1;
int cnt1 , cnt2;
cnt1 = cnt2 = 0;
int ans1 , ans2;
ans1 = ans2 = 0;
for (int i = 1 ; i <= tar2 ; ++i)
{
if (cnt2 >= len2 || (cnt1 < len1 && nums1[cnt1] < nums2[cnt2]))
{
if (i == tar1)
ans1 = nums1[cnt1];
if (i == tar2)
ans2 = nums1[cnt1];
cnt1++;
}
else
{
if (i == tar1)
ans1 = nums2[cnt2];
if (i == tar2)
ans2 = nums2[cnt2];
cnt2++;
}
}
if ((len1