zoukankan      html  css  js  c++  java
  • 4. 寻找两个正序数组的中位数

    class Solution {
    
        // 本题采用折半删除法
        public double findMedianSortedArrays(int[] nums1, int[] nums2) {
            int k = nums1.length + nums2.length;
            if(k % 2 == 0) {
                return (double)(findKth(nums1,0,nums2,0,k/2) + findKth(nums1,0,nums2,0,k/2 + 1)) / 2;
            }
            return (double)findKth(nums1,0,nums2,0,k/2 + 1);
        }                                    // l1指向nums1 l2指向nums2  k代表找到第几个数 每次删 k/2个数
        public int findKth(int[] nums1, int l1, int[] nums2, int l2, int k) {
            if(l1 >= nums1.length) return nums2[l2 + k - 1];
            if(l2 >= nums2.length) return nums1[l1 + k - 1];
            if(k == 1) return Math.min(nums1[l1],nums2[l2]);
            int num1 = l1 + k / 2 - 1 >= nums1.length ? Integer.MAX_VALUE : nums1[l1 + k / 2 - 1];
            int num2 = l2 + k / 2 - 1 >= nums2.length ? Integer.MAX_VALUE : nums2[l2 + k / 2 - 1];
            if(num1 < num2) {  // 每次删除较小的那一边
                return findKth(nums1,l1 + k / 2, nums2, l2, k - k / 2);
            }
            return findKth(nums1,l1, nums2, l2 + k / 2, k - k / 2);
        }
    }
  • 相关阅读:
    个人理解闭包
    个人理解回调
    在网站中设置一个分享到功能
    在lua中从一个字符串中移除空间源码
    成都实行积分落户
    unity3D客户端框架
    skynet对Windows环境支持的版本:Windows版skynet
    超期羁押
    资料
    媒体电话
  • 原文地址:https://www.cnblogs.com/yonezu/p/13269060.html
Copyright © 2011-2022 走看看