给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 。
请找出这两个有序数组的中位数。要求算法的时间复杂度为 O(log (m+n)) 。
示例 1:
nums1 = [1, 3]
nums2 = [2]
中位数是 2.0
示例 2:
nums1 = [1, 2]
nums2 = [3, 4]
中位数是 (2 + 3)/2 = 2.5
1 class Solution { 2 public: 3 double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) 4 { 5 int allnums = nums1.size() + nums2.size(); 6 int pos = allnums / 2; 7 int count = 0; 8 int p1 = 0, p2 = 0; 9 vector<int> save; 10 11 if (nums1.size() == 0 && nums2.size() == 0) return 0; 12 13 while (count <= pos) 14 { 15 if ((p1+1)>nums1.size()) 16 { 17 save.push_back(nums2[p2]); 18 p2++; 19 count++; 20 continue; 21 } 22 23 if ((p2+1)>nums2.size()) 24 { 25 save.push_back(nums1[p1]); 26 p1++; 27 count++; 28 continue; 29 } 30 31 if (nums1[p1] >= nums2[p2]) 32 { 33 save.push_back(nums2[p2]); 34 p2++; 35 count++; 36 } 37 else 38 { 39 save.push_back(nums1[p1]); 40 p1++; 41 count++; 42 } 43 44 } 45 46 if (allnums % 2 == 1) return save[save.size() - 1]; 47 else return (save[save.size() - 1] + save[save.size() - 2]) / (2.0); 48 } 49 };
原文地址:https://www.cnblogs.com/nkqlhqc/p/9085326.html
时间: 2024-09-30 16:27:57