leetcode 4. 瀵绘壘涓や釜姝e簭鏁扮粍鐨勪腑浣嶆暟
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 4. 瀵绘壘涓や釜姝e簭鏁扮粍鐨勪腑浣嶆暟相关的知识,希望对你有一定的参考价值。
鏍囩锛?a href='http://www.mamicode.com/so/1/kth' title='kth'>kth
-o amp 鐩存帴 ndk return code4. 瀵绘壘涓や釜姝e簭鏁扮粍鐨勪腑浣嶆暟
缁欏畾涓や釜澶у皬涓?m 鍜?n 鐨勬搴忥紙浠庡皬鍒板ぇ锛夋暟缁?nums1 鍜?nums2銆?/p>
璇蜂綘鎵惧嚭杩欎袱涓搴忔暟缁勭殑涓綅鏁帮紝骞朵笖瑕佹眰绠楁硶鐨勬椂闂村鏉傚害涓?O(log(m + n))銆?/p>
浣犲彲浠ュ亣璁?nums1?鍜?nums2?涓嶄細鍚屾椂涓虹┖銆?/p>
鏉ユ簮锛氬姏鎵o紙LeetCode锛?br>
閾炬帴锛?a href="https://leetcode-cn.com/problems/median-of-two-sorted-arrays">https://leetcode-cn.com/problems/median-of-two-sorted-arrays
钁椾綔鏉冨綊棰嗘墸缃戠粶鎵€鏈夈€傚晢涓氳浆杞借鑱旂郴瀹樻柟鎺堟潈锛岄潪鍟嗕笟杞浇璇锋敞鏄庡嚭澶勩€?br>
瑙i鎬濊矾锛?br>
瀵绘壘鏁扮粍涓殑涓綅鏁帮紝鍗宠浆鍖栦负瀵绘壘鏈夊簭鏁扮粍鐨勭k灏忔暟闂锛堢k灏忕殑鏁板嵆涓轰腑浣嶆暟锛?br>
棰樼洰瑕佹眰鏃堕棿澶嶆潅搴锛坙og锛坢+n锛夛級鏄剧劧閲囩敤浜屽垎娉曪紝姝ら閲囩敤鏄姌鍗婂垹闄ゆ壘绗琸灏忔暟
闂锛氫负浠€涔堝彲浠ョ洿鎺ュ垹闄ょ涓€涓暟缁勪腑鐨勫墠k/2涓暟鍛紵
鎴戜滑瑕佸鎵剧殑鏄綋鍓嶄袱涓湁搴忔暟缁勪腑鐨勭k灏忕殑鏁帮紝鏄剧劧閫氳繃姣旇緝鍙互鍒ゆ柇鍑哄墧闄ょ殑k/2涓暟涓€瀹氬湪绗琸灏忔暟鐨勫乏杈?鍙互鐩存帴鍓旈櫎
璇佹槑锛?br>
璁句袱涓暟缁勬€诲厓绱犱釜鏁颁负n
鍥犱负鏁扮粍涓烘湁搴忛€掑鏁扮粍锛岃璇佹槑鎵€鍓旈櫎鐨勬暟閮藉湪绗琸灏忔暟宸﹁竟锛屽彧闇€璇佹槑鍓旈櫎鐨勬暟涓殑鏈€澶ф暟鍦ㄧk灏忔暟鐨勫乏杈癸紝鍗宠瘉鏄庡湪璇ユ暟鍙宠竟鐨勫厓绱犱釜鏁板ぇ浜庣瓑浜庯紙n-k+1锛?br>
鍥犱负nums1[k/2-1]<nums2[k/2-1]鏃讹紝涓や釜鏁扮粍涓嚦灏戞湁n-(k/2)2+1涓暟澶т簬绛変簬nums1[k/2-1]
鍙堝洜涓簁>=(k/2)2
鎵€浠-(k/2)*2+1>=n-k+1
鎵€浠ュ湪nums1[k/2-1]鍙宠竟鐨勫厓绱犱釜鏁板ぇ浜庣瓑浜庯紙n-k+1锛?br>
鎵€浠ユ垜浠槸鍙互鐩存帴鍓旈櫎閭d簺鏁扮殑
涓嶆柇杩涜鎶樺崐鍓旈櫎锛岀洿鍒発=1鏃讹紝鍗充腑浣嶆暟鏄綋鍓嶆暟缁勫墿浣欐暟涓殑鏈€灏忔暟鏃讹紝鐩存帴姣旇緝涓や釜鏁扮粍涓綋鍓嶇殑绗竴涓暟锛堝嵆鏈€灏忔暟锛夊彇杈冨皬鐨勬暟鍗充负涓綅鏁?br> 浠g爜濡備笅
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int n=nums1.size(),m=nums2.size();
int k1=(n+m+1)/2,k2=(n+m+2)/2;//褰搉+m涓哄鏁版椂k1=k2;
return (findKth(nums1,0,n-1,nums2,0,m-1,k1)+findKth(nums1,0,n-1,nums2,0,m-1,k2))/2.0;//褰搉+m涓哄鏁版椂鍗冲彇鍒扮殑鍚屼竴涓暟锛宯+m涓哄伓鏁板嵆涓や釜鏁板彇骞冲潎
}
int findKth(vector<int>&nums1,int le1,int ri1,vector<int>&nums2,int le2,int ri2,int k){
int length1=ri1-le1+1;
int length2=ri2-le2+1;
if(length1>length2) return findKth(nums2,le2,ri2,nums1,le1,ri1,k);//淇濊瘉绗竴涓暟缁勬瘮绗簩涓暟缁勭煭
if(length1==0) return nums2[le2+k-1];//褰撶涓€涓暟缁勪负绌烘椂锛岀洿鎺ヤ粠绗簩涓暟缁勫彇绗琸灏忔暟
if(k==1) return min(nums1[le1],nums2[le2]);
int i=min(k/2,length1);
int j=min(k/2,length2);
if(nums1[le1+i-1]>nums2[le2+j-1]){
return findKth(nums1,le1,ri1,nums2,le2+j,ri2,k-j);
}
else{
return findKth(nums1,le1+i,ri1,nums2,le2,ri2,k-i);
}
}
};
以上是关于leetcode 4. 瀵绘壘涓や釜姝e簭鏁扮粍鐨勪腑浣嶆暟的主要内容,如果未能解决你的问题,请参考以下文章
Repeats SPOJ - REPEATS(鍚庣紑鏁扮粍瑙e喅閲嶅娆℃暟鏈€澶氱殑杩炵画閲嶅瀛愪覆)
[LeetCode] 255. Verify Preorder Sequence in Binary Search Tree 楠岃瘉浜屽弶鎼滅储鏍戠殑鍏堝簭搴忓垪