Leetcode騰訊精選練習2

2021-09-26 14:17:24 字數 850 閱讀 3237

原題

兩個大小為 m 和 n 的排序陣列 nums1 和 nums2 。

請找出兩個排序陣列的中位數並且總的執行時間複雜度為 o(log (m+n)) 。

示例 1:

nums1 = [1, 3]

nums2 = [2]

中位數是 2.0

示例 2:

nums1 = [1, 2]

nums2 = [3, 4]

中位數是 (2 + 3)/2 = 2.5

看到這題目自然而然肯定會想到先合併兩個有序陣列,然後根據索引來找到其中位數,這個時候,就會發現leetcode中有合併兩個陣列或者鍊錶的題目。用這種解法的方法比較簡單,**如下:

class solution

else

}while(n>=0)

return nums[m+n-1]/2+nums[m+n]/2;}

}但是 顯然 這種方法不滿足時間複雜度的要求。我想,這應該也是這題被劃分為困難題的原因。我覺得如果要滿足時間複雜度為o(log (m+n))的要求,肯定分別對兩個陣列進行類似二分法的處理,目前我在思考這種做法,也在網上找了一些關於這題的處理方法。其中我覺得比較好的方法如下。

**解答部分**如下。

class solution

int findkth(int nums1, int i, int nums2, int j, int k)

else return findkth(nums1, i, nums2, j + k / 2, k - k / 2);

}不用遍歷nums1和nums2中間的元素,分別對他們進行分隔處理。

看來學習的路還很遠,日後一定自己想到複雜度滿足要求的演算法再來更新此文章。

Leetcode騰訊精選練習04

原題 leetcode7 給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。示例 1 輸入 123 輸出 321 示例 2 輸入 123 輸出 321 示例 3 輸入 120 輸出 21 注意 假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 231,231 1...

Leetcode騰訊精選練習05

請你來實現乙個atoi函式,使其能將字串轉換成整數。首先,該函式會根據需要丟棄無用的開頭空格字元,直到尋找到第乙個非空格的字元為止。當我們尋找到的第乙個非空字元為正或者負號時,則將該符號與之後面盡可能多的連續數字組合起來,作為該整數的正負號 假如第乙個非空字元是數字,則直接將其與之後連續的數字字元組...

Leetcode騰訊精選練習22

原題 leetcode62 不同路徑 乙個機械人位於乙個 m x n 網格的左上角 起始點在下圖中標記為 start 機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角 在下圖中標記為 finish 問總共有多少條不同的路徑?例如,上圖是乙個7 x 3 的網格。有多少可能的路徑?1.數學...