LeetCode演算法題目 4

2021-10-08 05:36:13 字數 2121 閱讀 4843

給定兩個大小為 m 和 n 的正序(從小到大)陣列nums1nums2

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

你可以假設nums1nums2不會同時為空。

示例 1:

nums1 = [1, 3]

nums2 = [2]

則中位數是 2.0

示例 2:

nums1 = [1, 2]

nums2 = [3, 4]

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

中位數(median)又稱中值,統計學中的專有名詞,是按順序排列的一組資料中居於中間位置的數,代表乙個樣本、種群或概率分布中的乙個數值,其可將數值集合劃分為相等的上下兩部分。對於有限的數集,可以通過把所有觀察值高低排序後找出正中間的乙個作為中位數。如果觀察值有偶數個,通常取最中間的兩個數值的平均數作為中位數。

/*暴力解:先將兩個陣列合併(歸併排序),然後根據奇數還是偶數,返回中位數。(不滿足題目要求)*/

常見排序演算法:

/*暴力解法——合併陣列(歸併排序)*/

class solution

//陣列1

if(len_nums1 == 0 && len_nums2 != 0)else

}//陣列2

if(len_nums2 == 0 && len_nums1 != 0)else

}//兩個陣列都不為空,進行歸併排序合併兩個有序陣列為乙個

int count = 0;

int index1 = 0, index2 = 0;

while(count != (len_nums1 + len_nums2))

break;

}//陣列2已經全部放入,將剩餘陣列1的順序放入

if(index2 == len_nums2)

break;

}//放置資料

if(nums1[index1] < nums2[index2])else

}//判斷總長度,輸出結果

if(count % 2 == 0)else}}

時間複雜度:遍歷全部陣列 (m+n)

空間複雜度:開闢了乙個陣列,儲存合併後的兩個陣列 o(m+n)

/*使用二分方法,將問題轉化為求解兩個陣列中第k大的數字*/

//找到兩個陣列中的第k小的元素

public int find_knum(int nums1, int temp1, int nums2, int temp2, int k)

if(temp2 >= nums2.length)

if(k == 1)

//計算要進行比較的兩個陣列中對應的值,來選擇去除哪一部分

//int 類整數的最大值是 2 的 31 次方 - 1 = 2147483648 - 1 = 2147483647

//可以用 integer.max_value 表示它,即 int value = integer.max_value;

int value = integer.max_value;

int mid1 = (temp1 + k / 2 - 1) < nums1.length ? nums1[temp1 + k / 2 - 1] : value;

int mid2 = (temp2 + k / 2 - 1) < nums2.length ? nums2[temp2 + k / 2 - 1] : value;

//比較兩者的大小,通過遞迴來去除前k/2個元素

if(mid1 < mid2)

return find_knum(nums1, temp1, nums2, temp2 + k / 2, k - k / 2);}}

LeetCode演算法題目 7

題目描述 給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 231,231 1 請根據這個假設,如果反轉後整數溢位那麼就返回 0。解決方案 反轉整數的方法可以與反轉字串進行模擬。我們想重複 彈出 xx 的最後一位...

LeetCode演算法題目 3

給定乙個字串,找出其中不含有重複字元的最長子串的長度。示例 1 輸入 abcabcbb 輸出 3解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 輸入 pwwkew 輸出 3解釋 因為無重...

leetcode演算法題目 5

給定乙個字串s,找到s中最長的回文子串。可以假設s的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 暴力解法 1 依據回文串定義,遍歷列舉所有長度大於等於 2的子串,依次判斷是否為回文串 2 針對大於 當前得到的最...