Leetcode004-Median of Two Sorted Arrays

Problem

Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.

Example:

There are two sorted arrays nums1 and nums2 of size m and n respectively.

Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).

You may assume nums1 and nums2 cannot be both empty.

Example 1:

nums1 = [1, 3]
nums2 = [2]

The median is 2.0

Example 2:

nums1 = [1, 2]
nums2 = [3, 4]

The median is (2 + 3)/2 = 2.5

Process

  • 合并两个有序的数组
  • 找到数组的中位数

std::meger

template <class InputIterator1, class InputIterator2, class OutputIterator>
  OutputIterator merge (InputIterator1 first1, InputIterator1 last1,
                        InputIterator2 first2, InputIterator2 last2,
                        OutputIterator result)
{
  while (true) {
    if (first1==last1) return std::copy(first2,last2,result);
    if (first2==last2) return std::copy(first1,last1,result);
    *result++ = (*first2<*first1)? *first2++ : *first1++;
  }
}

Parameters

  • first1, last1

    Input iterators to the initial and final positions of the first sorted sequence. The range used is [first1,last1), which contains all the elements between first1 and last1, including the element pointed by first1 but not the element pointed by last1.

  • first2, last2

    Input iterators to the initial and final positions of the second sorted sequence. The range used is [first2,last2).

  • result

    Output iterator to the initial position of the range where the resulting combined range is stored. Its size is equal to the sum of both ranges above.

  • comp

    Binary function that accepts two arguments of the types pointed by the iterators, and returns a value convertible to bool. The value returned indicates whether the first argument is considered to go before the second in the specific strict weak ordering it defines.

    The function shall not modify any of its arguments.

    This can either be a function pointer or a function object.

    Return value

    An iterator pointing to the past-the-end element in the resulting sequence.

Solution

class Solution {
public:
    double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
        
        vector<int> merged;
        double median;
        merge(nums1.begin(), nums1.end(),
              nums2.begin(), nums2.end(),
              back_inserter(merged));

        if (merged.size() % 2 == 0) {
            median = (double)(merged[merged.size() / 2 - 1] + merged[merged.size() / 2]) / 2;
        }
        else {
            median = merged[(merged.size() - 1) / 2];
        }
        
        return median;
    }
};

Result

Time SubmittedStatusRuntimeMemoryLanguage
a few seconds agoAccepted24 ms10.5 MBcpp

Summary

TODO:Solution的解法如何实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值