日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

leetCode-第四题求两个数组的中位数

發(fā)布時間:2025/3/15 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 leetCode-第四题求两个数组的中位数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

兩數(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
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

合并數(shù)組并進行排序,但是這樣算法復雜度就不符合題目中的要求了,因此在C++實現(xiàn)的時候結(jié)合了二分查找的方法進行實現(xiàn);
go解題:

package mainimport ("fmt""sort" )/* 輸入:nums1 = [1,3], nums2 = [2] 輸出:2.00000 解釋:合并數(shù)組 = [1,2,3] ,中位數(shù) 2*/func findMedianSortedArrays(nums1 []int, nums2 []int) float64 {numsSet := make([]int, 0, 6)numsSet = append(numsSet, nums1...)numsSet = append(numsSet, nums2...)sort.Ints(numsSet)numsLen := len(numsSet)if numsLen == 0 {return 0.0000}fmt.Println(numsSet)if numsLen%2 == 0 {return (float64(numsSet[numsLen/2-1]) + float64(numsSet[numsLen/2])) / 2} else {return float64(numsSet[numsLen/2])} }func main() {nums1 := []int{1, 2}nums2 := []int{3, 4}median := findMedianSortedArrays(nums1, nums2)fmt.Println(median) }

解題思路

如下數(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í)行結(jié)果可以看出,使用該方法在時間點相同的情況下,官方32ms 自己的代碼執(zhí)行需要24ms,比官方代碼快8ms左右

總結(jié)

以上是生活随笔為你收集整理的leetCode-第四题求两个数组的中位数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。