zoukankan      html  css  js  c++  java
  • 【leetCode】4. Median of Two Sorted Arrays

    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)).

    Example 1:

    nums1 = [1, 3]
    nums2 = [2]
    
    The median is 2.0
    

    Example 2:

    nums1 = [1, 2]
    nums2 = [3, 4]
    
    The median is (2 + 3)/2 = 2.5

     1 class Solution {
     2     public double findMedianSortedArrays(int[] nums1, int[] nums2) {
     3         int n1 = nums1.length;
     4         int n2 = nums2.length;
     5         if ((n1 + n2) % 2 == 1) {
     6             return findNumK(nums1, n1, nums2, n2, (n1 + n2) / 2 + 1);
     7         } else {
     8             return (findNumK(nums1, n1, nums2, n2, (n1 + n2) / 2) + findNumK(nums1, n1, nums2, n2, (n1 + n2) / 2 + 1))
     9                     / 2;
    10         }
    11     }
    12 
    13     public double findNumK(int[] nums1, int n1, int[] nums2, int n2, int k) {
    14         if (n1 > n2) {
    15             return findNumK(nums2, n2, nums1, n1, k);
    16         }
    17         if (n1 == 0) {
    18             return nums2[k - 1];
    19         }
    20         if (k == 1) {
    21             return Math.min(nums1[0], nums2[0]);
    22         }
    23         int temp1 = Math.min(k / 2, n1);
    24         int temp2 = k - temp1;
    25         if (nums1[temp1 - 1] < nums2[temp2 - 1]) {
    26             return findNumK(subArray(nums1, temp1), n1 - temp1, nums2, n2, k - temp1);
    27         } else if (nums1[temp1 - 1] > nums2[temp2 - 1]) {
    28             return findNumK(nums1, n1, subArray(nums2, temp2), n2 - temp2, k - temp2);
    29         } else {
    30             return nums1[temp1 - 1];
    31         }
    32     }
    33 
    34     public int[] subArray(int[] a, int b) {
    35         int[] temp = new int[a.length - b];
    36         for (int i = 0; i < a.length - b; i++) {
    37             temp[i] = a[b + i];
    38         }
    39         return temp;
    40     }
    41 }
  • 相关阅读:
    腾讯测试开发岗一面二面上机编程题
    软件测试工程师职业发展漫谈
    学习 Python,这 22 个包怎能不掌握?
    Loj514「LibreOJ β Round #2」模拟只会猜题意
    后缀数组模板(倍增)
    USACO06DEC 牛奶模式
    BZOJ3680 JSOI2004 平衡点
    loj6278 数列分块入门题2
    loj6277 数列分块入门题1
    Codeforces 383C Propagating tree, 线段树, 黑白染色思想
  • 原文地址:https://www.cnblogs.com/carsonwuu/p/7529264.html
Copyright © 2011-2022 走看看