[leetcode]4. Median of Two Sorted Arrays

本文详细解析了LeetCode中一道关于寻找两个有序数组中位数的Hard难度题目。通过对算法逻辑的深入探讨,包括合并两个有序数组并找出中位数的过程,以及对特殊情况的处理,最终成功通过所有2000多个测试案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
        }
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值