美文网首页
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;
    }

相关文章

  • LeetCode 经典】MedianSortedArrays

    【LeetCode 经典】MedianSortedArrays 前言 在两个排序数组中寻找中位数。这个题目本质上二...

  • 两个排序数组的中位数

    这是一道经典的数组类型的题目,利用的二分查找(Binary Search )。 4.两个排序数组的中位数(Leet...

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

    给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 。 请找出这两个有序数组的中位数。要求算法的时...

  • #4 Median of Two Sorted Arrays

    在两个有序数组中寻找中位数,思想时归并排序的思想,将两个数组归并排序到一个数组中,提前算出中位数的个数减少循环次数

  • 两个排序数组的中位数

    两个排序数组的中位数 给定两个大小为 m 和 n 的有序数组nums1和nums2。 请找出这两个有序数组的中位数...

  • leetcode-0004

    题目: 4. 寻找两个有序数组的中位数 关键词:排序 折半查找 思路: 查找第k个数,每次查找二个数组的第k/2位...

  • LintCode 80 [Median]

    原题 给定一个未排序的整数数组,找到其中位数。中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组...

  • Lintcode-中位数

    问题描述: 给定一个未排序的整数数组,找到其中位数。中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序...

  • 中位数

    给定一个未排序的整数数组,找到其中位数。中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N...

  • OJ lintcode 中位数

    给定一个未排序的整数数组,找到其中位数。中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N...

网友评论

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

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