日常 力扣刷題4

2021-10-21 11:24:39 字數 1108 閱讀 6118

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

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

示例 1:

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

輸出:2.00000

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

設計乙個時間複雜度為 o(log (m+n)) 的演算法解決此問題

題外話:這是本人在力扣做的第乙個標註為困難的題,比較有紀念意義?。

解題:首先看到題,反應出關鍵點:兩個陣列都是正序,而最後結果只需要得出乙個數,時間複雜度要求為o(log(m+n))。這就讓人不得不想到二分查詢了。

另外陣列在做插入操作的時候不如list方便,故在開始的時候將最後合併的資料存放在arraylist中。

思路:1.判斷那個陣列元素多,將元素多的陣列轉化為list集合,方便插入操作。

2.維護兩個變數 start和end,分別代表二分查詢的範圍。

3.利用二分查詢的思路,鎖定插入位置。

4.得到最終的list後,根據索引找到中位數。

開始按思路解完後,發現時間用的比較多,考慮到兩個陣列都是有序的,應該還有可以利用的地方。於是新增了乙個維護的變數flag,用來記錄上乙個插入元素在最終的list中的索引,下一次在查詢時start將不固定在0開始,而是賦flag的值,事實證明,確實起到了作用。

**如下:

class solution 

for(int i = 0; i < nums1.length; i++) else if ((double)nums1[i]nums2list.get(mid))else

} else else}}

}if(nums2list.size()%2 == 0)else

}else

for(int i = 0; i < nums2.length; i++) else if ((double)nums2[i]nums1list.get(mid))else

}elseelse}}

}if(nums1list.size()%2 == 0)else

}return result;

}}

刷題 力扣 4

題目鏈結 題目描述 給定兩個大小為 m 和 n 的正序 從小到大 陣列 nums1 和 nums2。請你找出並返回這兩個正序陣列的中位數。高階 你能設計乙個時間複雜度為 o log m n 的演算法解決此問題嗎?示例 1 輸入 nums1 1,3 nums2 2 輸出 2.00000 解釋 合併陣列...

力扣刷題系列

給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 和 nums2 不會同時為空。從中學知識知道,如果需要求一組數字的中位數,那麼先要從小到大排列這些數字。接著,如果總共有奇數個...

刷題 力扣 119

題目鏈結 題目描述 給定乙個非負索引 k,其中 k 33,返回楊輝三角的第 k 行。在楊輝三角中,每個數是它左上方和右上方的數的和。示例 輸入 3 輸出 1,3,3,1 高階 題目分析 根據題目描述楊輝三角形每一行從左到右依次是 組合 combiner是用來計算組合的結果 依次遍歷每一行從左到右 c...