Skip to content

Commit bc3ef00

Browse files
committed
0004 done in c language
1 parent 55bc9c9 commit bc3ef00

File tree

3 files changed

+85
-0
lines changed

3 files changed

+85
-0
lines changed

solution/0000-0099/0004.Median of Two Sorted Arrays/README.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,36 @@ proc medianOfTwoSortedArrays(nums1: seq[int], nums2: seq[int]): float =
350350
# echo medianOfTwoSortedArrays(arrA, arrB)
351351
```
352352

353+
#### C
354+
355+
```c
356+
int findKth(int *nums1, int m, int i, int *nums2, int n, int j, int k) {
357+
if (i >= m)
358+
return nums2[j + k - 1];
359+
if (j >= n)
360+
return nums1[i + k - 1];
361+
if (k == 1)
362+
return nums1[i] < nums2[j] ? nums1[i] : nums2[j];
363+
364+
int p = k / 2;
365+
366+
int x = (i + p - 1 < m) ? nums1[i + p - 1] : INT_MAX;
367+
int y = (j + p - 1 < n) ? nums2[j + p - 1] : INT_MAX;
368+
369+
if (x < y)
370+
return findKth(nums1, m, i + p, nums2, n, j, k - p);
371+
else
372+
return findKth(nums1, m, i, nums2, n, j + p, k - p);
373+
}
374+
375+
double findMedianSortedArrays(int *nums1, int m, int *nums2, int n) {
376+
int total = m + n;
377+
int a = findKth(nums1, m, 0, nums2, n, 0, (total + 1) / 2);
378+
int b = findKth(nums1, m, 0, nums2, n, 0, (total + 2) / 2);
379+
return (a + b) / 2.0;
380+
}
381+
```
382+
353383
<!-- tabs:end -->
354384
355385
<!-- solution:end -->

solution/0000-0099/0004.Median of Two Sorted Arrays/README_EN.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,36 @@ proc medianOfTwoSortedArrays(nums1: seq[int], nums2: seq[int]): float =
346346
# echo medianOfTwoSortedArrays(arrA, arrB)
347347
```
348348

349+
#### C
350+
351+
``` c
352+
int findKth(int *nums1, int m, int i, int *nums2, int n, int j, int k) {
353+
if (i >= m)
354+
return nums2[j + k - 1];
355+
if (j >= n)
356+
return nums1[i + k - 1];
357+
if (k == 1)
358+
return nums1[i] < nums2[j] ? nums1[i] : nums2[j];
359+
360+
int p = k / 2;
361+
362+
int x = (i + p - 1 < m) ? nums1[i + p - 1] : INT_MAX;
363+
int y = (j + p - 1 < n) ? nums2[j + p - 1] : INT_MAX;
364+
365+
if (x < y)
366+
return findKth(nums1, m, i + p, nums2, n, j, k - p);
367+
else
368+
return findKth(nums1, m, i, nums2, n, j + p, k - p);
369+
}
370+
371+
double findMedianSortedArrays(int *nums1, int m, int *nums2, int n) {
372+
int total = m + n;
373+
int a = findKth(nums1, m, 0, nums2, n, 0, (total + 1) / 2);
374+
int b = findKth(nums1, m, 0, nums2, n, 0, (total + 2) / 2);
375+
return (a + b) / 2.0;
376+
}
377+
```
378+
349379
<!-- tabs:end -->
350380
351381
<!-- solution:end -->
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
int findKth(int *nums1, int m, int i, int *nums2, int n, int j, int k) {
2+
if (i >= m)
3+
return nums2[j + k - 1];
4+
if (j >= n)
5+
return nums1[i + k - 1];
6+
if (k == 1)
7+
return nums1[i] < nums2[j] ? nums1[i] : nums2[j];
8+
9+
int p = k / 2;
10+
11+
int x = (i + p - 1 < m) ? nums1[i + p - 1] : INT_MAX;
12+
int y = (j + p - 1 < n) ? nums2[j + p - 1] : INT_MAX;
13+
14+
if (x < y)
15+
return findKth(nums1, m, i + p, nums2, n, j, k - p);
16+
else
17+
return findKth(nums1, m, i, nums2, n, j + p, k - p);
18+
}
19+
20+
double findMedianSortedArrays(int *nums1, int m, int *nums2, int n) {
21+
int total = m + n;
22+
int a = findKth(nums1, m, 0, nums2, n, 0, (total + 1) / 2);
23+
int b = findKth(nums1, m, 0, nums2, n, 0, (total + 2) / 2);
24+
return (a + b) / 2.0;
25+
}

0 commit comments

Comments
 (0)