LeetCode題解 第七周

2021-08-10 06:52:13 字數 1729 閱讀 1069

there are two sorted arraysnums1andnums2of size m and n respectively.

find the median of the two sorted arrays. the overall run time complexity should be o(log (m+n)).

nums1 = [1, 3]

nums2 = [2]

the median is 2.0

nums1 = [1, 2]

nums2 = [3, 4]

the median is (2 + 3)/2 = 2.5

1.這道題目相對於其他題目來說是比較難的,雖然一般來說要找到兩個陣列中的中位數的話,只要將兩個陣列合在一起再找中位數就行了,但是這樣做的時間複雜度是不滿足o(log(m+n))的。因此,利用這種平常的方法是不能解決這道題目的。

2.對於這道題目主要是使用leetcode解釋中所提到的迭代方法。這種方法的目的是在於直接尋找兩個陣列之間的中位數而不經過兩個陣列的結合和排序,而是根據中位數的特殊性質來進行尋找。一般來說,只要滿足以下這個條件的數就可以說是陣列的中位數了:

(1)將已排序的陣列分為大小相等的兩部分,且前一部分的數都比後一部分中的數要小,則這個數就是這個陣列的中位數。

而對於兩個陣列的中位數,其實也是只要找到滿足以下條件的數就可說是這兩個陣列的中位數了:

(1)將兩個陣列中的所有元素分成大小兩部分,且前一部分的數都比後一部分中的數要小,則這個數就是這兩個陣列的中位數了。

即length(rightpart)==length(leftpart)&&max(rightpart)<=min(leftpart)

在陣列a或者b中找到滿足這個條件的元素即為兩個陣列的中位數

3.如何在a或者b中找到這個中位數呢?設a[i],b[j]為陣列a位於後一部分的最小的元素和陣列b位於後一部分的最小的元素,而這兩個元素當滿足以下兩個條件的時候就可以找到這兩個陣列的中位數了。

(1)j=(m+n+1)/2-i,(m為陣列a的大小,n為陣列b的大小)

(2)b[j]>a[i-1]&&a[i]>b[j-1]

我們可以利用二分法去找到滿足條件的i,假設i是區間[imin,imax]中的乙個值。如果求得b[j]<=a[i-1],證明i過大,那麼下乙個迴圈應該在[imin,i-1]之間查詢新的i;相反則應該在[i+1,imax]之間尋找更大的i,直到找到滿足條件的i為止。找到這個i也意味著找到了中位數

code

class solution 

else

}double core(vector& nums1, vector& nums2)

if (n == 0)

while (1)

else if (j == 0)

else

if ((m + n) % 2 == 1)

int minright = 0;

if (i == m)

else if (j == n)

else

return (double)(maxleft + minright) / 2;

}else if (inums1[i])

else if (i>imin&&nums1[i - 1] > nums2[j])

}return 0;

}};

第七周題解

f.奇偶交換 思路 對於串中的每乙個數字,如果它是奇數 偶數 的話,無論它怎麼交換,之前在它前面的奇數 偶數 還是在它前面,所以你可以把奇數和偶數分離出來,順序還是和它在原串中的奇數 偶數 順序不變,然後進行偶數和奇數比較,小的就先輸出來 include include include includ...

第七周作業

書中習題1 說說下列程式的執行過程和運算結果 include includeusing namespace std double squ double x 函式原形 int main 主函式 書2,不用庫函式,求整數次冪 3.程式設計實現輸入兩個4x5矩陣和5x3矩陣,定義函式並在主函式中呼叫計算它...

第七周總結

3.1 索引特點 很容易想到 mysql 索引可以大大提高檢索速度 優點 1.通過建立唯一索引,保證資料表每行資料的唯一性 2.大大加快資料查詢速度 3.在使用分組和排序進行資料查詢時,可以顯著減少查詢中分組和排序的時間 缺點 1.維護索引需要耗費資料庫資源 2.索引需要占用磁碟空間,索引檔案可能比...