leetcode中hard的题目,但是思路并不难,测试样例2000多个,要考虑到各种情况,不然就会wa
具体思路:将两个排序的数组合并为一个数组(中间遇到了一些麻烦,pa,pb两个指针到头的处理,if if 不能这样使用,严格写成if else if ),最后在排好序的数组中找中位数,这时也需要判断,奇偶性,得到的结果不一样分别处理,修改了1个多小时才把2000多个样例都调试通,思维上还是不够严谨,这道题适合那些眼高手低的人,看上去不难,但是处处都是陷阱,只有思维足够严谨,才能一次AC。
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int pa=0;
int pb=0;
int n=nums1.size();
int m=nums2.size();
int mid=(n+m)/2;
int count=0;
double result=0;
int temp[10010];
if(n==0)
{
if(m%2)
{
return nums2[mid];
}
else{
result=(nums2[mid]+nums2[mid-1])/2.0;
return result;
}
}
if(m==0)
{
if(n%2)
{
return nums1[mid];
}
else{
result=(nums1[mid]+nums1[mid-1])/2.0;
return result;
}
}
for(count=0;count<(n+m);count++){
if(pa<n&&pb<m){
//指针不越界
if(nums1[pa]>nums2[pb])
{
temp[count]=nums2[pb];
pb++;
//count++;
}
else
{
temp[count]=nums1[pa];
pa++;
//count++;
}
}
else if(pa>=n)
{
temp[count]=nums2[pb];
pb++;
}
else if(pb>=m)
{
temp[count]=nums1[pa];
pa++;
}
}
//result=max(nums1[pa],nums2[pb]);
if((n+m)%2)
{
result=temp[mid];
return result;
}
else
{
result=(temp[mid-1]+temp[mid])/2.0;
//result=temp[mid];
return result;
}
}
};