4 尋找兩個正序陣列的中位數

2022-06-06 01:30:15 字數 1926 閱讀 6060

給定兩個大小為 m 和 n 的正序(從小到大)陣列 nums1 和 nums2。請你找出並返回這兩個正序陣列的中位數。

高階:你能設計乙個時間複雜度為 o(log (m+n)) 的演算法解決此問題嗎?

示例 1:

輸入:nums1 = [1,3], nums2 = [2]

輸出:2.00000

解釋:合併陣列 = [1,2,3] ,中位數 2

示例 2:

輸入:nums1 = [1,2], nums2 = [3,4]

輸出:2.50000

解釋:合併陣列 = [1,2,3,4] ,中位數 (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

1. 使用歸併的方式,合併兩個有序陣列,得到乙個大的有序陣列。大的有序陣列的中間位置的元素,即為中位數。

2. 不需要合併兩個有序陣列,只要找到中位數的位置即可。由於兩個陣列的長度已知,因此中位數對應的兩個陣列的下標之和也是已知的。維護兩個指標,初始時分別指向兩個陣列的下標 00 的位置,每次將指向較小值的指標後移一位(如果乙個指標已經到達陣列末尾,則只需要移動另乙個陣列的指標),直到到達中位數的位置。

1

class

solution else

17 }else

if(i ==n1)else

if(j ==n2)24}

25int n = (n1 + n2) / 2;26

if((n1 + n2) % 2 == 0

)else

31return

temp;32}

33 };

1

class

solution else

16 }else

if(i ==n1)else

if(j ==n2)

23 k++;24}

25int n = (n1 + n2) / 2;

26if((n1 + n2) % 2 == 0)else

31return

temp;32}

33 }

1

class

solution:

2def findmediansortedarrays(self, nums1: list[int], nums2: list[int]) ->float:

3nums1.extend(nums2)

4nums1.sort()

5 n =len(nums1)

6 k = int(n / 2)

7if(n % 2 ==0):

8 temp = (nums1[k - 1] + nums1[k]) / 2.0

9else

:10 temp =nums1[k]

11return

temp

12

努力去愛周圍的每乙個人,付出,不一定有收穫,但是不付出就一定沒有收穫! 給街頭賣藝的人零錢,不和深夜還在擺攤的小販討價還價。願我的部落格對你有所幫助(*^▽^*)(*^▽^*)!

如果客官喜歡小生的園子,記得關注小生喲,小生會持續更新(#^.^#)(#^.^#)。

4 尋找兩個正序陣列的中位數

思路 我現在還沒有進行優化,大概就是合併陣列 參照之前的順序表合併 然後如果合併陣列的大小sum是偶數,返回sum 2和sum 2 1兩個元素除以二,如果sum是奇數則直接返回sum 2的元素 double findmediansortedarrays int nums1,int nums1size...

4 尋找兩個正序陣列的中位數

給定兩個大小為 m 和 n 的正序 從小到大 陣列nums1和nums2。請你找出這兩個正序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設nums1和nums2不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0示例 2 nums1 1,2 nu...

4 尋找兩個正序陣列的中位數

題目描述 給定兩個大小為 m 和 n 的正序 從小到大 陣列 nums1 和 nums2。請你找出這兩個正序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 和 nums2 不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0 示例 2...