LeetCode:68.寻找两个正序数组的中位数

目录

1.寻找两个正序数组的中位数


1.寻找两个正序数组的中位数

cpp 复制代码
class Solution {
public:
    int getMinKth(vector<int>& nums1, vector<int>& nums2, int k)
    {
        int m = nums1.size(), n = nums2.size();
        int index1 = 0, index2 = 0;

        while(true)
        {
            if(index1 == m) return nums2[index2 + k - 1];
            if(index2 == n) return nums1[index1 + k - 1];
            if(k == 1) return min(nums1[index1], nums2[index2]);

            int newIndex1 = min(index1 + k / 2 - 1, m - 1);
            int newIndex2 = min(index2 + k / 2 - 1, n - 1);
            int sum1 = nums1[newIndex1];
            int sum2 = nums2[newIndex2];

            if(sum1 <= sum2)
            {
                k -= newIndex1 - index1 + 1;
                index1 = newIndex1 + 1;
            }
            else
            {
                k -= newIndex2 - index2 + 1;
                index2 = newIndex2 + 1;
            }
        }
    }

    double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) 
    {
        int length = nums1.size() + nums2.size();
        if(length % 2 == 1)
            return getMinKth(nums1, nums2, (length + 1) / 2);
        else
            return (getMinKth(nums1, nums2, length / 2) + getMinKth(nums1, nums2, length / 2 + 1)) / 2.0;
    }
};
相关推荐
海琴烟Sunshine2 小时前
Leetcode 14. 最长公共前缀
java·服务器·leetcode
努力学习的小廉4 小时前
我爱学算法之—— 模拟(下)
c++·算法
海琴烟Sunshine5 小时前
Leetcode 26. 删除有序数组中的重复项
java·算法·leetcode
PAK向日葵5 小时前
【算法导论】NMWQ 0913笔试题
算法·面试
PAK向日葵5 小时前
【算法导论】DJ 0830笔试题题解
算法·面试
PAK向日葵5 小时前
【算法导论】LXHY 0830 笔试题题解
算法·面试
麦麦麦造6 小时前
DeepSeek突然发布 V3.2-exp,长文本能力加强,价格进一步下探
算法
lingran__7 小时前
速通ACM省铜第十七天 赋源码(Racing)
c++·算法
MobotStone8 小时前
手把手教你玩转AI绘图
算法