GO實現:leetcode之尋找兩個正序陣列的中位數
問題描述:
給定兩個大小為m和n的正序(從小到大)陣列nums1和nums2。
請你找出這兩個正序陣列的中位數,並且要求演算法的時間度複雜度為O(log(m+n))
你可以假設nums1和nums2不會同時為空。
- 示例1:
nums1 = [1,3]
nums2 = [2]
則中位數為2.0
- 示例2:
nums1 = [1,2]
nums2 = [3,4]
則中位數為(2+3)/2 = 2.5
解法一:簡單粗暴,將兩個陣列合並,兩個有序陣列的合併也是歸併排序的一部分,然後根據奇數還是偶數,返回中位數。
func main() {
nums1 := []int{1, 3}
nums2 := []int{2}
midian := findMidianNumSortedArrays(nums1, nums2)
println("midian", midian)
}
func findMidianNumSortedArrays(nums1 []int, nums2 []int) int {
len1 := len(nums1)
len2 := len(nums2)
t := len1 + len2
if len1 == 0 { //其中一個陣列為空
return findMidianNum(nums2)
}
if len2 == 0 {
return findMidianNum(nums1)
}
i, j := 0, 0 //兩陣列均為非空
nums := []int{}
for count := 0; count < (t); count++ {
if i == len1 {
if j < len2 { //陣列nums1被訪問完,陣列nums2沒訪問完
s2 := nums2[j:len2]
nums = append(nums, s2...)
break
}
}
if j == len2 {
if i < len1 { //陣列nums2被訪問完,陣列nums1沒訪問完
s1 := nums1[i:len1]
nums = append(nums, s1...)
log.Info("nums,s1", nums, s1)
break
}
}
if nums1[i] < nums2[j] { //歸併排序的思想
nums = append(nums, nums1[i])
i++
} else {
nums = append(nums, nums2[j])
j++
}
}
midian := findMidianNum(nums)
return midian
}
func findMidianNum(num []int) (mid int) {
if len(num)%2 == 0 {
mid = (num[len(num)/2] + num[len(num)/2-1]) / 2
} else {
mid = num[(len(num)-1)/2]
}
return mid
}
相關文章
- 尋找兩個正序陣列中的中位數陣列
- 【LeetCode Hot 100】4. 尋找兩個正序陣列的中位數LeetCode陣列
- 4. 尋找兩個正序陣列的中位數陣列
- leetcode 4. Median of Two Sorted Arrays 尋找兩個正序陣列的中位數(困難)LeetCode陣列
- 力扣演算法題:尋找兩個正序陣列的中位數力扣演算法陣列
- LeetCode--尋找兩個有序陣列的中位數(05)LeetCode陣列
- LeetCode第4題:尋找兩個有序陣列的中位數LeetCode陣列
- 尋找兩個有序陣列的中位數陣列
- 尋找兩個正序陣列的中位數問題,方法一:合併陣列檢索法陣列
- [LeetCode 刷題] 4. 尋找兩個有序陣列的中位數 (Hard)LeetCode陣列
- LeetCode解題(C++)-4. 尋找兩個有序陣列的中位數LeetCodeC++陣列
- 用 PHP 在 力扣 刷演算法 [尋找兩個正序陣列的中位數]{有空就更}PHP力扣演算法陣列
- LeetCode-兩個排序陣列的中位數LeetCode排序陣列
- LeetCode 4. 兩個排序陣列的中位數LeetCode排序陣列
- LeetCode-4. 兩個排序陣列的中位數LeetCode排序陣列
- 尋找陣列中和為定值的兩個數陣列
- 兩個有序陣列的中位數陣列
- LeetCode題集-4 - 尋找兩個有序陣列的中位數,圖文並茂,六種解法,萬字講解LeetCode陣列
- 從0打卡leetcode之day 5 ---兩個排序陣列的中位數LeetCode排序陣列
- 給定兩個大小為 m 和 n 的正序(從小到大)陣列 nums1 和 nums2。請你找出並返回這兩個正序陣列的中位數。陣列
- 4. 兩個排序陣列的中位數排序陣列
- 演算法-兩個排序陣列的中位數演算法排序陣列
- [Python手撕]兩個升序陣列的中位數Python陣列
- LeetCode-153-尋找旋轉排序陣列中的最小值LeetCode排序陣列
- 【LeetCode】153. 尋找旋轉排序陣列中的最小值LeetCode排序陣列
- 找一個陣列中特別的數陣列
- python實現給定一個數和陣列,求陣列中兩數之和為給定的數Python陣列
- 【Java】尋找陣列中“主要元素”Java陣列
- 尋找陣列中第K大的元素陣列
- 尋找陣列的中心索引陣列索引
- leetcode 349. 兩個陣列的交集LeetCode陣列
- LeetCode-349-兩個陣列的交集LeetCode陣列
- 陣列中未出現的最小正整數陣列
- lgP5788 陣列中尋找右側第一個大於它的數陣列
- leetcode:41. 缺失的第一個正數(困難,陣列)LeetCode陣列
- LeetCode-350-兩個陣列的交集 IILeetCode陣列
- 陣列中每個陣列元素出現的次數陣列
- leetcode 287 尋找重複的數LeetCode