4. 两个排序数组的中位数-LeetCode

给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 。

请找出这两个有序数组的中位数。要求算法的时间复杂度为 O(log (m+n)) 。


示例 1:

nums1 = [1, 3]
nums2 = [2]

中位数是 2.0


示例 2:

nums1 = [1, 2]
nums2 = [3, 4]

中位数是 (2 + 3)/2 = 2.5


思路:两个数组已排序好,故将其合并为一个数组,再按中位数的数学定义得出答案


解决代码:

 public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        int nums1_len=nums1.length;
        int nums2_len=nums2.length;
        //返回的结果result
        double result=0;
        int [] nums=new int[nums1_len+nums2_len];
        int i=0,j=0,k=0;
        //往数组按元素大小插入
        while(i<nums1_len && j<nums2_len) {
            if(nums1[i]<nums2[j]) {
                nums[k++]=nums1[i++];
            }else {
                nums[k++]=nums2[j++];
            }
        }
        //如果num2的元素未完全插入且num1已插入完全
        while(i==nums1_len && j<nums2_len) {
            nums[k++]=nums2[j++];
        }
        //如果num1的元素未完全插入且num2已插入完全
        while(i<nums1_len && j==nums2_len) {
            nums[k++]=nums1[i++];
        }
        //判断nums元素个数
        if(nums.length%2==0) {
            //偶数:  [nums(len/2-1)+nums[(len/2)]/2
            result=(double)(nums[nums.length/2-1]+nums[nums.length/2])/2;
        }else {
            //奇数:  [nums(len/2-1)/2]
            result=(double)nums[(nums.length-1)/2];
        }
        return result;
    }

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容