美文网首页
4. 两个排序数组的中位数-LeetCode

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

作者: 0Xday | 来源:发表于2018-07-22 14:40 被阅读0次

    给定两个大小为 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;
        }
    

    相关文章

      网友评论

          本文标题:4. 两个排序数组的中位数-LeetCode

          本文链接:https://www.haomeiwen.com/subject/msblmftx.html