• 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);
    }
  • 相关阅读:
    HDU 2546:饭卡(01背包)
    HPU 第三次积分赛:阶乘之和(水题)
    拓扑排序练习题
    HDU 2647:Reward(拓扑排序+队列)
    HDU 3342:Legal or Not(拓扑排序)
    HDU 2094:产生冠军(拓扑排序)
    POJ 2585:Window Pains(拓扑排序)
    51Nod 1002:数塔取数问题(DP)
    cogs696 longest prefix
    poj3764 The xor-longest Path
  • 原文地址:https://www.cnblogs.com/Dream-Fish/p/4743160.html
Copyright © 2020-2023  润新知