leetCode-第四题求两个数组的中位数
兩數(shù)組中的中位數(shù)
原題鏈接: 兩數(shù)組的中位數(shù)
給定兩個大小分別為 m 和 n 的正序(從小到大)數(shù)組 nums1 和 nums2。請你找出并返回這兩個正序數(shù)組的 中位數(shù) 。
示例 1:
輸入:nums1 = [1,3], nums2 = [2]
輸出:2.00000
解釋:合并數(shù)組 = [1,2,3] ,中位數(shù) 2
示例 2:
輸入:nums1 = [1,2], nums2 = [3,4]
輸出:2.50000
解釋:合并數(shù)組 = [1,2,3,4] ,中位數(shù) (2 + 3) / 2 = 2.5
示例 3:
輸入:nums1 = [0,0], nums2 = [0,0]
輸出:0.00000
示例 4:
輸入:nums1 = [], nums2 = [1]
輸出:1.00000
示例 5:
輸入:nums1 = [2], nums2 = []
輸出:2.00000
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/median-of-two-sorted-arrays
著作權歸領扣網(wǎng)絡所有。商業(yè)轉載請聯(lián)系官方授權,非商業(yè)轉載請注明出處。
合并數(shù)組并進行排序,但是這樣算法復雜度就不符合題目中的要求了,因此在C++實現(xiàn)的時候結合了二分查找的方法進行實現(xiàn);
go解題:
解題思路
如下數(shù)組:
我們需要想辦法找到一條線能將兩個數(shù)組按照左變小右邊大的方式分開,那么在取中位數(shù)的時候就能根據(jù)線所在的情況取出兩個數(shù)組中的中位數(shù)
C++代碼按照二分查找方式實現(xiàn)的代碼:
// // Created by andrew on 2021/3/7. // #include <iostream> #include <vector>using namespace std;class Solution { public:static double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {size_t len1 = 0, len2 = 0;len1 = nums1.size();len2 = nums2.size();size_t sumLen = len1 + len2;int i = 0, j = 0;bool dataStatus = false;int data1 = 0, data2 = 0, data3 = 0;if (sumLen % 2 == 0) {dataStatus = true;}for (i = 0, j = 0; i + j <= sumLen / 2;) {if (i >= len1) {data3 = data2;data2 = data1;data1 = nums2[j];j++;continue;}if (j >= len2) {data3 = data2;data2 = data1;data1 = nums1[i];i++;continue;}if (nums1[i] >= nums2[j]) {data3 = data2;data2 = data1;data1 = nums2[j];j++;} else {data3 = data2;data2 = data1;data1 = nums1[i];i++;}}if (dataStatus) {return ((double) data2 + (double) data1) / 2;} elsereturn (double) data1;} };int main(int argc, char *argv[]) {vector<int> nums1 = {1};vector<int> nums2 = {2,3, 4};cout << Solution::findMedianSortedArrays(nums1, nums2) << endl;return 0; }實際執(zhí)行結果可以看出,使用該方法在時間點相同的情況下,官方32ms 自己的代碼執(zhí)行需要24ms,比官方代碼快8ms左右
總結
以上是生活随笔為你收集整理的leetCode-第四题求两个数组的中位数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【软件测试】黑盒测试の边界值分析法
- 下一篇: 作者:熊贇(1980-),女,博士,复旦