Skip to content

Commit a87dbb2

Browse files
java: add problem 4 and unit test
1 parent 2480bed commit a87dbb2

File tree

2 files changed

+86
-2
lines changed

2 files changed

+86
-2
lines changed

Java/src/main/java/com/supercoderhawk/Solution_1_10.java

Lines changed: 59 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,69 @@
33
public class Solution_1_10 {
44
/**
55
* problem 1
6-
* @param nums: 输入数组
6+
*
7+
* @param nums: 输入数组
78
* @param target: 目标和
89
* @return: 目标和的索引数组
910
*/
1011
public int[] twoSum(int[] nums, int target) {
11-
return new int[]{1,2};
12+
return new int[]{1, 2};
1213
}
1314

15+
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
16+
if(nums1.length == 0){
17+
if(nums2.length % 2 == 0){
18+
return (nums2[nums2.length/2]+nums2[nums2.length/2-1])/2.0;
19+
}else{
20+
return nums2[nums2.length/2];
21+
}
22+
}else if(nums2.length == 0){
23+
if(nums1.length % 2 == 0){
24+
return (nums1[nums1.length/2]+nums1[nums1.length/2-1])/2.0;
25+
}else{
26+
return nums1[nums1.length/2];
27+
}
28+
}
29+
30+
int[] A = nums1, B = nums2;
31+
double median = 0.0, maxLeft = 0.0, minRight = 0.0;
32+
if (nums1.length > nums2.length) {
33+
A = nums2;
34+
B = nums1;
35+
}
36+
int imin = 0, imax = A.length, i, j, halfLength = (A.length + B.length + 1) / 2;
37+
while (imin <= imax) {
38+
i = (imin + imax) / 2;
39+
j = halfLength - i;
40+
if (i < A.length && B[j - 1] > A[i]) {
41+
imin = i + 1;
42+
} else if (i > 0 && A[i - 1] > B[j]) {
43+
imax = i - 1;
44+
} else {
45+
if (i == 0) {
46+
maxLeft = B[j - 1];
47+
} else if (j == 0) {
48+
maxLeft = A[i - 1];
49+
} else {
50+
maxLeft = A[i - 1] > B[j - 1] ? A[i - 1] : B[j - 1];
51+
}
52+
53+
if (i == A.length) {
54+
minRight = B[j];
55+
} else if (j == B.length) {
56+
minRight = A[i];
57+
} else {
58+
minRight = A[i] < B[j] ? A[i] : B[j];
59+
}
60+
61+
if ((A.length + B.length) % 2 == 1)
62+
median = maxLeft;
63+
else
64+
median = (maxLeft + minRight) / 2;
65+
66+
break;
67+
}
68+
}
69+
return median;
70+
}
1471
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.supercoderhawk;
2+
3+
4+
import org.junit.Before;
5+
import org.junit.Test;
6+
import com.supercoderhawk.Solution_1_10;
7+
8+
import static org.junit.Assert.*;
9+
10+
public class Solution_1_10Test {
11+
private Solution_1_10 solution = new Solution_1_10();
12+
13+
@Test
14+
public void twoSum() throws Exception {
15+
}
16+
17+
@Test
18+
public void findMedianSortedArrays() throws Exception {
19+
int[] a1={1},a2={2,3};
20+
assertEquals(2.0,solution.findMedianSortedArrays(a1,a2),0.0);
21+
assertEquals(1.0,solution.findMedianSortedArrays(new int[]{1},new int[]{}),0.0);
22+
assertEquals(1.5,solution.findMedianSortedArrays(new int[]{1},new int[]{2}),0.0);
23+
assertEquals(3.0,solution.findMedianSortedArrays(new int[]{1},new int[]{2,3,4,5}),0.0);
24+
assertEquals(4.0,solution.findMedianSortedArrays(new int[]{5,6},new int[]{1,2,3,4,7}),0.0);
25+
}
26+
27+
}

0 commit comments

Comments
 (0)