分治算法求两数组中位数

来源:互联网 发布:气步枪瞄准器 知乎 编辑:程序博客网 时间:2024/06/02 07:44

LEECODE Algorithm 4. Median of Two Sorted Arrays

本Markdown编辑器使用[StackEdit][6]修改而来,用它写博客,将会带来全新的体验哦:

  • 题目
  • 代码块
  • 想法

Description

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)).

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

代码

class Solution {public:    double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {        vector<int> nums3;        double a;        double n = nums1.size(),m = nums2.size();        int i, j, k;          i = j = k = 0;          while (i < n && j < m)          {              if (nums1[i] < nums2[j])                  nums3.push_back(nums1[i++]);              else                  nums3.push_back(nums2[j++]);         }          while (i < n)              nums3.push_back(nums1[i++]);          while (j < m)              nums3.push_back(nums2[j++]);           a = (nums3.at((m+n-1) /2) + nums3.at((m+n) /2)) ;        a/=2;        return a;    }};

想法

题目要求的复杂度是O(log(n+m)),那也就是说需要采用分治,归并排序复杂度是nlogn,那么在本题中,也就是(n+m)log(n+m),由于左右已经排好序,没必要使用归并算法,因此直接采用归并思想中的合并就可以了,本题中复杂度还是O(m+n).

原创粉丝点击