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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

leetcode 4. 寻找两个有序数组的中位数,c语言

發(fā)布時間:2025/4/5 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 leetcode 4. 寻找两个有序数组的中位数,c语言 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

leetcode上第四道題,如下。

給定兩個大小為 m 和 n 的有序數(shù)組?nums1 和?nums2。請你找出這兩個有序數(shù)組的中位數(shù),并且要求算法的時間復(fù)雜度為?O(log(m + n))。你可以假設(shè)?nums1?和?nums2?不會同時為空。

?題目很簡潔,首先要搞懂中位數(shù)的概念,這玩意和平均數(shù)是有差別的。一開始我就搞錯了,把中位數(shù)和平均數(shù)搞混了,結(jié)果做了半天結(jié)果越來越離譜。百度的中位數(shù)概念如下:

中位數(shù)是按順序排列的一組數(shù)據(jù)中居于中間位置的數(shù),即在這組數(shù)據(jù)中,有一半的數(shù)據(jù)比他大,有一半的數(shù)據(jù)比他小。

?如果序列個數(shù)為奇數(shù),則中間的數(shù)就是中位數(shù),只有一個,如果個數(shù)為偶數(shù)的話,則中位數(shù)是中間兩位數(shù)的均值,需要找到兩個數(shù)求平均值,如果個數(shù)為奇數(shù),其中位數(shù)為((n+1)/2)== ((n+2)/2),對于偶數(shù),中位數(shù)為分別為((n+2)/2)和(n/2),其中偶數(shù)情況下N/2 == (N+1)/2,因此不論奇數(shù)還是偶數(shù),我們都可以求((n+2)/2和((n+1)/2),然后取平均值。

如果沒有時間復(fù)雜度要求的話很簡單,倆數(shù)組重排列后取中位數(shù)即可,但是題目要求是時間復(fù)雜度為O(log(m + n))。網(wǎng)上的同志說看到時間復(fù)雜度為log的基本上都是二分法,這個我之前不知道,水平不夠高??戳艘晃淮笊竦慕夥?#xff0c;明白了。這道題可以這樣來看,求倆有序數(shù)組的中位數(shù),相當于在一個有序的數(shù)組里找到第K個數(shù),假設(shè)數(shù)組A的起始搜索位置和數(shù)組B的起始搜索位置分別是i和j,如果起始位置大于數(shù)組長度的話,說明在當前數(shù)組已經(jīng)沒有數(shù)了,這時候直接去另一個數(shù)組里取第K個數(shù)即可。如果K為1的話,返回倆數(shù)組中第一個值當中的最小值即可,如果是其它情況,我們對K進行二分,先找到K/2,假設(shè)K' = K/2,找到則排除一半,再在找另一半即可,首先判斷起始位置加上要找的數(shù)長度是否超過數(shù)組長度,如果超過的話,這時候另外一個數(shù)組(假設(shè)為B)里前K' 個數(shù)是可以省略的,因為我們要找第K個數(shù),那么它絕對不會在B的K‘ 里面,因為長度不夠。舉個例子,數(shù)組A={1},數(shù)組B={0,2,4,6,7,8,9,12},一共9個數(shù),假設(shè)是有序數(shù)組,我們知道第五個數(shù)就是中位數(shù),這里我們先二分K,5/2取余 = 2,數(shù)組A和B的初始查找位置都為0,對于A而言,2大于它的長度1,這時候我們可以排除掉數(shù)組B中的前兩個元素了,因為第五個數(shù)肯定要在前兩個數(shù)后面,這時候我們就排除掉兩個,這時候需要移動B的起始位置,j = j + K',剩下三個,同樣的道理,對三進行二分。還有一種情況是兩個數(shù)組里從各自的起始位置都存在K‘個數(shù),這時候就需要比較A[ i + K' ]和B[ j + K' ],哪個大則移動另外一個數(shù)組的起始指針K’ 位,相等則移動任意一個。這時候就排除了K‘,我們只需要遞歸查找第K - K',同理,繼續(xù)二分,K’ = (K - K') / 2; 直到K = 1,或者某個數(shù)組起始位置超出數(shù)組長度,這時候直接返回另一個數(shù)組里對應(yīng)K‘即實我們要找的值。

總的來說,思路很巧妙,沒有經(jīng)過訓(xùn)練很難短時間內(nèi)想到。此外就是二分法通常都需要遞歸調(diào)用。

下面是該問題的C代碼實現(xiàn)。

#define MIN(a,b) ((a) > (b) ? (b) : (a))int GetKth(int *nums1, int nums1Size, int start1, int *nums2, int nums2Size, int start2, int k) {int K1, K2;if (start1 + 1 > nums1Size)return nums2[start2 + k - 1];if (start2 + 1 > nums2Size)return nums1[start1 + k - 1];if (k == 1)return MIN(nums1[start1], nums2[start2]);if (start1 + k / 2 > nums1Size)return GetKth(nums1, nums1Size, start1, nums2, nums2Size, start2 + k / 2, k - k / 2);if (start2 + k / 2 > nums2Size)return GetKth(nums1, nums1Size, start1 + k / 2, nums2, nums2Size, start2, k - k / 2);K1 = nums1[start1 + k / 2 - 1];K2 = nums2[start2 + k / 2 - 1];if (K1 < K2)return GetKth(nums1, nums1Size, start1 + k / 2, nums2, nums2Size, start2, k - k / 2);elsereturn GetKth(nums1, nums1Size, start1, nums2, nums2Size, start2 + k / 2, k - k / 2); }double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size){int k1 = (nums1Size + nums2Size + 1)/2;int k2 = (nums1Size + nums2Size + 2)/2;//奇數(shù)和偶數(shù)一樣return ((double)GetKth(nums1, nums1Size, 0, nums2, nums2Size, 0, k1) + (double)GetKth(nums1, nums1Size, 0, nums2, nums2Size, 0, k2))/2; }

參考目錄:

1.?https://www.cnblogs.com/grandyang/p/4465932.html

=============================================================================================

Linux應(yīng)用程序、內(nèi)核、驅(qū)動、后臺開發(fā)交流討論群(745510310),感興趣的同學(xué)可以加群討論、交流、資料查找等,前進的道路上,你不是一個人奧^_^。
?

總結(jié)

以上是生活随笔為你收集整理的leetcode 4. 寻找两个有序数组的中位数,c语言的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 草免费视频 | 亚洲同性gay激情无套 | av大片在线看 | 久久嫩草视频 | 精品xxxx | 日韩毛毛片 | xxxwww国产 | 色哟哟精品观看 | 色综合天天色综合 | 日韩爽爽视频 | 美女精品网站 | 五月婷婷一区二区 | 国产亚洲欧美一区二区 | 天天弄| 久久在线看 | 海角官网| 中文第一页 | 亚洲国产丝袜 | 麻豆视频播放 | 久久久久久免费毛片精品 | 好吊视频一区二区三区四区 | 黄色一级视频片 | 亚洲免费精品视频 | 成人短视频在线观看 | 日韩大片在线免费观看 | 日韩二区三区四区 | 亚洲视频免费观看 | 精品人妻少妇一区二区三区 | 黄色裸体视频 | av黄色在线观看 | 欧美久久激情 | 国产美女无遮挡永久免费 | 日本激情久久 | 人人妻人人爽欧美成人一区 | 三级色网 | jizzjizz中国精品麻豆 | 麻豆一区二区三区精品视频 | 黄色性生活一级片 | 国产精品久久777777换脸 | 谁有毛片网站 | 亚洲国产无码久久 | 日本特级片 | 日韩av电影网站 | 九九热精品 | 日日骚一区二区 | 禁漫天堂黄漫画无遮挡观看 | 国产午夜手机精彩视频 | 很污很黄的网站 | 99国产精品99久久久久久粉嫩 | www.毛片.com | 奇米影视奇米色 | 东方av在线免费观看 | 亚洲一区在线播放 | 国产真人毛片 | 国产精品一区二区三区在线播放 | 女优在线观看 | 欧美午夜精品一区二区 | 日韩另类av | 视色网 | 99精品视频一区二区三区 | 羞羞的视频网站 | 色哟哟在线观看 | 亚洲一卡一卡 | 在线免费观看视频a | 亚洲成人婷婷 | 久综合| 日韩av伦理 | 女人18岁毛片 | 一本一道波多野结衣一区二区 | 亚洲一二三区视频 | 成人免费大全 | 五月99久久婷婷国产综合亚洲 | 伊人网视频在线 | 一级片小视频 | 黄色录像a级片 | 国产夫妻久久 | 粉嫩av懂色av蜜臀av分享 | 亚洲一区二区麻豆 | 精品国产伦一区二区三区 | 日韩av网站在线播放 | 国产91精品在线观看 | 肉嫁高柳在线 | av日日夜夜| 一本一本久久a久久精品综合麻豆 | 免费成人在线网站 | 日本三级中文 | 色吊妞| 黄色网页免费在线观看 | jul023被夫上司连续侵犯 | 精品人妻一区二区三区含羞草 | 免费的毛片视频 | 国产精品专区在线观看 | 欧美男人操女人 | 久久国产传媒 | 精品人妻在线播放 | 日韩欧美四区 | 国毛片 | 久久潮| 麻豆传媒网站入口 |