双指针hard题

[LeetCode]4. Median of Two Sorted Arrays 中文 - YouTube
依赖merge sort和priorityqueue的废物
正式变身山景城一姐小迷妹✪ω✪

寻找正序数组中位数

class Solution {
    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        int len1= nums1.length;
        int len2 = nums2.length;
        int len = len1 + len2;
        if(len1 > len2) {  // 始终保持nums1为小数组
            return findMedianSortedArrays(nums2, nums1);
        }
        
        if(len1 == 0) {
            int mid = len2 / 2;
            return (len2 % 2 != 0) ? (double) nums2[mid] : (nums2[mid - 1] + nums2[mid]) / 2.0;
        }
        
        int start1 = 0;
        int end1 = len1;
        int cut1 = 0;
        int cut2 = 0;
        while(start1 <= end1) {
            cut1 = (start1 + end1) / 2;
            cut2 = (len + 1) / 2 - cut1;  // 保证len为奇数时,从cut1和cut2的分界线左边取值
            double l1 = (cut1 == 0) ? Integer.MIN_VALUE : nums1[cut1 - 1];
            double l2 = (cut2 == 0) ? Integer.MIN_VALUE : nums2[cut2 - 1];
            double r1 = (cut1 == len1) ? Integer.MAX_VALUE : nums1[cut1];
            double r2 = (cut2 == len2) ? Integer.MAX_VALUE : nums2[cut2];
            if(l1 > r2) {
                end1 = cut1 - 1;
            }
            else if(r1 < l2) {
                start1 = cut1 + 1;
            }
            else {
                if(len % 2 != 0) {
                    return Math.max(l1, l2);
                }
                else {
                    return (Math.max(l1, l2) + Math.min(r1, r2)) / 2.0;
                }
            }
        }
        return -1;
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值