LeetCode第4題C語言題解

2021-09-30 18:59:14 字數 1495 閱讀 5948

description:

there are two sorted arraysnums1andnums2of size m and n respectively.

find the median of the two sorted arrays. the overall run time complexity should beo(log (m+n)).

you may assume nums1 and nums2cannot be both empty.

example 1:

nums1 = [1, 3]

nums2 = [2]

the median is 2.0

example 2:

nums1 = [1, 2]

nums2 = [3, 4]

the median is (2 + 3)/2 = 2.5

題解:

①看到這個題的第一想法是採用歸併演算法解決,將兩個有序陣列歸併成乙個,奇數個元素時取第(m+n)/2個元素的值即為所求值,偶數個則去(m+n)/2-1和(m+n)/2個平均值.速度是m+n

double findmediansortedarrays(int* nums1, int nums1size, int* nums2, int nums2size) 

//合併剩餘的部分

while(j②第二中方法是採用分治法解決,可以想到求兩個有序陣列合併後的中位數,設這個位置是k,則k=(m+n)/2;取a,b陣列的k/2位置的元素進行比較。有三種情況,a:a[k/2]>b[k/2],相當於合併後,b[0...k/2]個元素內不包含合併後的k位置的元素,可以捨去,從而加快效率。b:a[k/2]size1)

return findk(nums1,size1,nums2,size2,k);

if(size1==0) return nums2[k-1];//nums1是乙個空陣列

if(k==1) return (nums1[0]>nums2[0]?nums2[0]:nums1[0]);//兩個陣列長度均為1,返回較小的乙個

if(nums1[parta-1]>nums2[partb-1])

return findk(nums1,size1,nums2+partb,size2-partb,k-partb);

else if(nums1[parta-1]return findk(nums1+parta,size1-parta,nums2,size2,k-parta);

else return nums1[parta-1];

}double findmediansortedarrays(int* nums1, int nums1size, int* nums2, int nums2size)

C語言第33 34題

33.輸出指定範圍內的fibonacci數 輸入兩個正整數m和n 1 m,n 10000 輸出m n之間所有的fibonacci數。include stdio.h intfib int n void printfn int m,int n int main intfib int n void pri...

C語言第55 56題

將乙個陣列逆序輸出 include stdio.h void main 輸出 printf the result is n for i 0 i 10 i printf 5d arr i 有乙個已經排好序的陣列。現輸入乙個數,要求按原來的規律將它插入陣列中。include stdio.h void m...

C語言每日一練 第4題

已知資料檔案in.dat中有300個四位數,並呼叫readdat 函式把這些數儲存陣列a中,編寫函式jsvalue 其功能是 求出所有這些四位數是素數的個數cnt,再把所有滿足此條件的四位數依次存入陣列b中,然後對陣列b的按從小到大順序排列,最後編寫函式wirtedat 把陣列b中的數輸出到out....