题目:两个排序数组的中位数(C++)

纪念一下,这个是我第一次提交的程序就超过了百分之百的提交记录

程序如下:

static const auto io_speed_up = []()
{
    std::ios::sync_with_stdio(false);
    cin.tie(nullptr);
    return 0;
}();

class Solution {
public:
    double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
        int preNum      = 0;
        int nowNum      = 0;
        size_t nums1Idx = 0;
        size_t nums2Idx = 0;
        size_t length   = nums1.size( ) + nums2.size( );
        size_t index    = length / 2;
        for (size_t i = 0; i <= index; ++i)
        {
            if (nums2Idx >= nums2.size( ) || (nums1Idx < nums1.size( ) && nums1[nums1Idx] < nums2[nums2Idx]))
            {
                preNum = nowNum;
                nowNum = nums1[nums1Idx];
                ++nums1Idx;
            }
            else
            {
                preNum = nowNum;
                nowNum = nums2[nums2Idx];
                ++nums2Idx;
            }
        }
        if (length % 2)
            return nowNum;
        else
            return (double)(nowNum + preNum) / 2;
    }
};

观察了网站上的最优解法,发现是使用merge函数进行数组合并,考虑到merge数组合并的时候需要申请新的空间,所以merga中使用的方法应该比我的方法快一点。但是查看了merge的源码时并没有发现更优的地方(可能存在但是我看不出来?),所以我觉得是不是对merge函数进行了汇编级优化。得出结论,有时候充分利用stl库不仅省事而且快。

最后很奇怪的是网站上最优解和第二优解代码是一样的。喵喵喵?

原文地址:https://www.cnblogs.com/change4587/p/9146835.html