美文网首页
LeetCode004-Median of Two Sorted

LeetCode004-Median of Two Sorted

作者: Kay_Coding | 来源:发表于2018-11-20 23:47 被阅读0次

    Median of Two Sorted Arrays

    Question:

    There are two sorted arrays nums1 and nums2 of size m and n respectively.

    Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).

    You may assume nums1 and nums2 cannot be both empty.

    Example1:

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

    The median is 2.0

    Example2:

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

    The median is (2 + 3)/2 = 2.5

    解法代码

    public class LeetCode004 {
    
        public static void main(String[] args) {
            int[] nums1 = new int[]{1,3};
            int[] nums2 = new int[]{2};
            
            double medianDouble = findMedianSortedArrays(nums1, nums2);
            System.out.println(medianDouble);
            
            int[] nums3 = new int[]{1,3};
            int[] nums4 = new int[]{2,4};
            
            medianDouble = findMedianSortedArrays(nums3, nums4);
            System.out.println(medianDouble);
            
            int[] nums5 = new int[]{1};
            int[] nums6 = new int[]{2};
            
            medianDouble = findMedianSortedArrays(nums5, nums6);
            System.out.println(medianDouble);
        }
        
        private static double findMedianSortedArrays(int[] nums1, int[] nums2) {
            int[] numsTotal = new int[nums1.length + nums2.length];
            int i = 0,j = 0;
            
            while(i < nums1.length || j < nums2.length) {
                if(i < nums1.length && j < nums2.length) {
                    if(nums1[i] > nums2[j]) {
                        numsTotal[i + j] = nums2[j];
                        j++;
                    } else {
                        numsTotal[i + j] = nums1[i];
                        i++;
                    }
                } else if(i == nums1.length) {
                    numsTotal[i + j] = nums2[j];
                    j++;
                } else if(j == nums2.length) {
                    numsTotal[i + j] = nums1[i];
                    i++;
                }
            }
            double medianDouble = (numsTotal.length % 2 == 0) ? 
                    ((numsTotal[numsTotal.length/2 - 1]
                            + numsTotal[numsTotal.length/2])/2.0)
                    : numsTotal[numsTotal.length/2];
            
            return medianDouble;
        }
    }
    

    Output:

    2.0
    2.5
    1.5

    Time And Space Complexity

    • addTwoNumbers

    Time: O(m+n) 需要循环两个数组,时间复杂度O(m+n)
    Space:O(m+n) 新数组的长度为(m+n)

    Tips

    相关文章

      网友评论

          本文标题:LeetCode004-Median of Two Sorted

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