【leetcode】 4Median of Two Sorted Arrays求两个数组的中位数

class Solution {
public:
    double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
        int len1 = nums1.size();
        int len2 = nums2.size();
        float res1=0.0,res2=0.0,res;
        int j,flag = 0;
        for(int i =0;i < len1;i++){
            for(int j = i;j < len1;j++){
                if(nums1[i] > nums1[j]){
                    int k = nums1[j];
                    nums1[j] = nums1[i];
                    nums1[i] = k;
                }
            }
        }
        for(int i =0;i < len2;i++){
            for(int j = i;j < len2;j++){
                if(nums2[i] > nums2[j]){
                    int k = nums2[j];
                    nums2[j] = nums2[i];
                    nums2[i] = k;
                }
            }
        }

        if((len1+len2)%2==0 && len1 != 0 && len2 != 0){
            int i=0,m=0,n=0;           
            for(;i <= (len1 + len2)/2 - 1;i++){ 
                if (nums1[m] <= nums2[n]){
                    res1 = nums1[m];
                    m++;  
                    if(m>len1-1)
                    {m--;
                     j = i;
                     flag = 1;
                     break;
                    }
                }
                else{
                    res1 = nums2[n];
                    n++;
                    if(n>len2-1)
                    {n--;
                     j=i;
                    flag = 2;
                     break;
                    }
                }
                
            }
            //一个到界了
            if(flag == 1&&((len1+len2)/2-j)>1)
                    res = nums2[(len1 + len2)/2 - len1 -1] + nums2[(len1 + len2)/2 - len1];
            else if(flag == 2&&((len1+len2)/2-j)>1)
                    res = nums1[(len1 + len2)/2 - len2 -1] + nums1[(len1 + len2)/2 - len2];        
            else if(flag != 0&&nums1[m]<= nums2[n]&&((len1+len2)/2-j)== 1)
                    res = nums2[n] + res1;
            else if(flag != 0&&nums1[m] > nums2[n]&&((len1+len2)/2-j) == 1)
                    res = nums1[m] + res1;
                 
            //未到界
            else if(nums1[m]<= nums2[n])
                    res = nums1[m] + res1;
            else
                    res = nums2[n] + res1;
            //res
            res = res/2.0;
        }
        else if((len1+len2)%2!=0 && len1 != 0 && len2 != 0){
             int m=0,n=0,flag=0;
             for(int i = 0;i <= (len1 + len2)/2 ;i++){   
                if (nums1[m] <= nums2[n]){
                    res1 = nums1[m];
                    m++;
                    if(m>len1-1&&i < (len1+len2)/2)
                    {m--;
                     flag = 1;
                    }
                }
                else if (nums1[m] > nums2[n]){
                    res1 = nums2[n];
                    n++;
                    if(n>len2-1&&i < (len1+len2)/2)
                    {n--;
                    flag = 2;                    
                    }
                }
            }     
            if(flag == 1)
                res = nums2[(len1 + len2)/2 - m];
            else if(flag == 2)
                res = nums1[(len1 + len2)/2 - n];
            else 
                res = res1;
        }  
       else if(len1 == 0){
            if(len2%2 ==0 )
                res = (nums2[len2/2-1]+nums2[len2/2])/2.0;
            else
                res = nums2[len2/2 ];
       }
       else if(len2 == 0){
            if(len1%2 ==0 )
                res = (nums1[len1/2-1]+nums1[len1/2])/2.0;
            else
                res = nums1[len1/2 ];
       }
        return res;
    }
};

以上为暴力求解,写完后感觉是不是傻!!!




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值