LeetCode-4. 兩個排序陣列的中位數
4. 兩個排序陣列的中位數
給定兩個大小為 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
#include<bits/stdc++.h>
using namespace std;
/********************提交程式碼********************/
double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size)
{
int *a=(int*)malloc((nums1Size+nums2Size+1)*sizeof(int));//將兩個陣列的值合併在一個陣列中
int *b=(int*)malloc((nums1Size+nums2Size+1)*sizeof(int));//排好序的合併陣列
int i,j=0,k,maxnum=0;
double ans=0;
for(i=0; i<nums1Size; ++i)
{
a[j++]=nums1[i];
if(nums1[i]>maxnum)//記錄最大值
maxnum=nums1[i];
}
for(i=0; i<nums2Size; ++i)
{
a[j++]=nums2[i];
if(nums2[i]>maxnum)
maxnum=nums2[i];
}
int *cnt=(int*)malloc((maxnum+1)*sizeof(int));//雜湊排序
for(i=0; i<=maxnum; ++i)//初始化
cnt[i]=0;
for(i=0; i<nums1Size+nums2Size; ++i)
++cnt[a[i]];
j=0;
for(i=0; i<=maxnum; ++i)
for(k=0; k<cnt[i]; ++k)//根據數出現的次數計入新的陣列
{
b[j++]=i;
}
if((nums1Size+nums2Size)%2)//奇數個
ans=b[(nums1Size+nums2Size)/2];
else//偶數個
ans=(b[(nums1Size+nums2Size)/2]+b[(nums1Size+nums2Size)/2-1])/2.0;
return ans;
}
/***************************************************/
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("F:/cb/read.txt","r",stdin);
//freopen("F:/cb/out.txt","w",stdout);
#endif
ios::sync_with_stdio(false);
cin.tie(0);
int m,n;
while(cin>>m>>n)
{
int a[1000],b[1000];
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(int i=0; i<m; ++i)
cin>>a[i];
for(int i=0; i<n; ++i)
cin>>b[i];
cout<<findMedianSortedArrays(a,m,b,n)<<endl;
}
return 0;
}
感覺我的思路和題目的分類不太一致哇……
兩個陣列歸到一個陣列裡放著,然後用雜湊的思想排序。
忍不住吐槽,Σ(っ°Д°;)っ這居然是困難題??? 恕我直言,某些中等題都比這個讓我頭疼(•́へ•́╬)
因為是“要求演算法的時間複雜度為 O(log (m+n))”?
就是隻能掃一遍,用cnt陣列記錄每個數出現的次數,然後掃描cnt陣列,值是幾就表明這個數出現了幾次,依次存起來就是有序陣列辣(〃'▽'〃)
相關文章
- 4. 兩個排序陣列的中位數排序陣列
- 演算法-兩個排序陣列的中位數演算法排序陣列
- LeetCode-兩個排序陣列的中位數LeetCode排序陣列
- LeetCode 4. 兩個排序陣列的中位數LeetCode排序陣列
- 兩個有序陣列的中位數陣列
- 尋找兩個有序陣列的中位數陣列
- 尋找兩個正序陣列中的中位數陣列
- [Python手撕]兩個升序陣列的中位數Python陣列
- 每天一道演算法題:求兩個排序陣列的中位數演算法排序陣列
- 【遞迴打卡1】在兩個長度相等的排序陣列中找到上中位數遞迴排序陣列
- 從0打卡leetcode之day 5 ---兩個排序陣列的中位數LeetCode排序陣列
- 4. 尋找兩個正序陣列的中位數陣列
- LeetCode--尋找兩個有序陣列的中位數(05)LeetCode陣列
- LeetCode第4題:尋找兩個有序陣列的中位數LeetCode陣列
- [LeetCode] Median of Two Sorted Arrays 兩個有序陣列的中位數LeetCode陣列
- 尋找兩個正序陣列的中位數問題,方法一:合併陣列檢索法陣列
- 力扣演算法題:尋找兩個正序陣列的中位數力扣演算法陣列
- [LeetCode 刷題] 4. 尋找兩個有序陣列的中位數 (Hard)LeetCode陣列
- GO實現:leetcode之尋找兩個正序陣列的中位數GoLeetCode陣列
- 二位陣列排序陣列排序
- PHP陣列多個欄位分別排序PHP陣列排序
- 找到兩個陣列中的公共元素陣列
- LeetCode解題(C++)-4. 尋找兩個有序陣列的中位數LeetCodeC++陣列
- 【LeetCode Hot 100】4. 尋找兩個正序陣列的中位數LeetCode陣列
- 在陣列中尋找和為指定值的兩個數陣列
- 二維陣列根據某個欄位排序陣列排序
- python實現給定一個數和陣列,求陣列中兩數之和為給定的數Python陣列
- 刪除排序陣列中的重複數字排序陣列
- 給定陣列中找到最大的兩個數陣列
- 陣列中每個陣列元素出現的次數陣列
- PHP 二維陣列, 按某一個欄位排序PHP陣列排序
- PHP二維陣列根據某個欄位排序PHP陣列排序
- Javascript中的陣列物件排序JavaScript陣列物件排序
- php 對二維陣列的某個欄位公用排序的方法PHP陣列排序
- 尋找陣列中和為定值的兩個數陣列
- 【c語言】求兩個數中不同的位的個數C語言
- 陣列中出現兩次的數陣列
- 陣列的排序陣列排序