力扣刷題系列

2021-10-04 02:38:34 字數 1647 閱讀 6649

給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。

請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o(log(m + n))。

你可以假設 nums1 和 nums2 不會同時為空。

從中學知識知道,如果需要求一組數字的中位數,那麼先要從小到大排列這些數字。接著,如果總共有奇數個數字,那麼直接取中間的,如果有偶數個數字,那麼取中間與中間後面乙個數字的平均數。

所以,第一步先將陣列合併。合併兩個陣列的方式非常多,最簡潔的就是三點運算子:

let result =

[...nums1,

...nums2]

接著,從小到大排列也很簡單,原生js就提供了乙個排列元素的方法:

result = result.

sort

((a,b)

=> a-b)

然後,考慮問題的乙個良好習慣就是考慮特殊的情況。所以,先想想有沒有什麼特殊的情況。比如,陣列為空,或者陣列只有乙個元素。所以需要抽取這兩種情況來處理。

if

(result.length ===0)

return

null

if(result.length ===1)

return result[

0]

最後,就是將上面求中位數的思路表達出來,總數是奇數則直接取中間的,偶數則取中間與後面一位的平均數。

let target =

parseint

((result.length /2)

)if(result.length %

2!==0)

else

var

findmediansortedarrays

=function

(nums1, nums2)

else

};

編寫乙個函式來查詢字串陣列中的最長公共字首。

如果不存在公共字首,返回空字串 「」。

【示例】

輸入: [「flower」,「flow」,「flight」]

輸出: 「fl」

寫乙個函式用於比較兩個字串的字串行,一旦出現不同的字元,則返回字元索引。接著,逐一比較陣列中的每對字串,得到多個索引值,分別將這些索引值存起來,最後求這組值的最小值就是最長的公共字首。

var

longestcommonprefix

=function

(strs)

let arr =

for(

let i=

0;ilet index = math.

min(

...arr)

function

foo(a,b)

let target_length = math.

max(a.length,b.length)

for(

let i=

0;i}return strs[0]

.slice(0

,index)

};

力扣刷題 陣列系列 2

刷題的順序,按照前輩的leetcode cookbook上的順序 給定乙個排序陣列,你需要在 原地 刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在 原地 修改輸入陣列 並在使用 o 1 額外空間的條件下完成 思考 1.題目要求原地刪除重複的元素,...

刷題 力扣 119

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

刷題 力扣 665

題目鏈結 題目描述 給你乙個長度為 n 的整數陣列,請你判斷在 最多 改變 1 個元素的情況下,該陣列能否變成乙個非遞減數列。我們是這樣定義乙個非遞減數列的 對於陣列中所有的 i 0 i n 2 總滿足 nums i nums i 1 示例 1 輸入 nums 4,2,3 輸出 true 解釋 你可...