zoukankan      html  css  js  c++  java
  • Leetcode 之 Median of Two Sorted Arrays

    C语言版

    double find_kth(int* nums1, int nums1Size, int* nums2, int nums2Size, int k, int c) {
        if (0 == nums1Size) {
            if (0 == c) return nums2[k - 1];
            else return (nums2[k - 1] + nums2[k]) / 2.0;
        }
        if (0 == nums2Size) {
            if (0 == c) return nums1[k - 1];
            else return (nums1[k - 1] + nums1[k]) / 2.0;
        }
        if (k == 1) {
            if (*nums1 < *nums2) {
                if (0 == c) return *nums1;
                else return (*nums1 + find_kth(nums1 + 1, nums1Size - 1, nums2, nums2Size, 1, 0)) / 2.0;
            }
            else {
                if (0 == c) return *nums2;
                else return (*nums2 + find_kth(nums1, nums1Size, nums2 + 1, nums2Size - 1, 1, 0)) / 2.0;
            } 
        }
        int i1 = k / 2 - 1;
        if (i1 >= nums1Size) i1 = nums1Size - 1;
        int i2 = k - 2 - i1;
        if (i2 >= nums2Size) {
            i2 = nums2Size - 1;
            i1 = k - 2 - i2; 
        }
        if (nums1[i1] == nums2[i2]) {
            if (0 == c) return nums1[i1];
            else return (nums1[i1] + find_kth(nums1 + i1 + 1, nums1Size - i1 - 1, nums2 + i2 + 1, nums2Size - i2 - 1, 1, 0)) / 2.0;
        }
        else if (nums1[i1] < nums2[i2]) {
            return find_kth(nums1 + i1 + 1, nums1Size - i1 - 1, nums2, nums2Size, k - i1 - 1, c);
        }
        else {
            return find_kth(nums1, nums1Size, nums2 + i2 + 1, nums2Size - i2 - 1, k - i2 - 1, c);
        }
    }
    
    double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) {
        if (0 == ((nums1Size + nums2Size) & 0x1)) 
        return find_kth(nums1, nums1Size, nums2, nums2Size, (nums1Size + nums2Size) / 2    , 1);
        return find_kth(nums1, nums1Size, nums2, nums2Size, (nums1Size + nums2Size) / 2 + 1, 0);
    }
  • 相关阅读:
    209. Minimum Size Subarray Sum
    208. Implement Trie (Prefix Tree)
    207. Course Schedule
    206. Reverse Linked List
    205. Isomorphic Strings
    204. Count Primes
    203. Remove Linked List Elements
    201. Bitwise AND of Numbers Range
    199. Binary Tree Right Side View
    ArcGIS API for JavaScript 4.2学习笔记[8] 2D与3D视图同步
  • 原文地址:https://www.cnblogs.com/Dream-Fish/p/4743160.html
Copyright © 2011-2022 走看看