There are two sorted arrays nums1 and nums2 of size m and n respectively.
Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).
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
第一次代码:
public class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int m = nums1.length, n = nums2.length;
int i1 = 0, i2 = 0, j1 = m - 1, j2 = n - 1, i = 0, j = m + n - 1;
if(m != 0 && n == 0){
if(m % 2 == 0){
return 1.0*(nums1[m/2] + nums1[(m/2) - 1])/2;
}else{
return nums1[m/2];
}
}
if(n != 0 && m == 0){
if(n % 2 == 0){
return 1.0*(nums2[n/2] + nums2[(n/2) - 1])/2;
}else{
return nums2[n/2];
}
}
int[] visited1 = new int[m];
int[] visited2 = new int[n];
while(i <= j){
if(i == j){
if(i2 < n && visited2[i2] == 0){
return nums2[i2];
}
if(i1 < m && visited1[i1] == 0){
return nums1[i1];
}
}
if((i+1) == j){
double sum = 0;
if(i2 < n && visited2[i2] == 0){
visited2[i2] = 1;
sum += nums2[i2];
}
if(j2 >= 0 && visited2[j2] == 0){
sum += nums2[j2];
}
if(i1 < m && visited1[i1] == 0){
visited1[i1] = 1;
sum += nums1[i1];
}
if(j1 >= 0 && visited1[j1] == 0){
sum += nums1[j1];
}
return 1.0*sum/2;
}
if(i2 == n || (i1 < m && (nums1[i1] < nums2[i2]))){
visited1[i1] = 1;
i1++;
}else{
visited2[i2] = 1;
i2++;
}
i++;
if(j2 == -1 || (j1 >= 0 && (nums1[j1] > nums2[j2]))){
visited1[j1] = 1;
j1--;
}else{
visited2[j2] = 1;
j2--;
}
j--;
}
return 0;
}
}第二次:
public class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int i = 0, iMax = nums1.length-1, j = 0, jMax = nums2.length - 1, now = 0, result = 0, res = 0;;
int count = nums1.length + nums2.length;
while(true){
if(i <= iMax){
if(j <= jMax){
if(nums1[i] < nums2[j]){
result = nums1[i];
i++;
}else{
result = nums2[j];
j++;
}
}else{
result = nums1[i];
i++;
}
}else{
if(j <= jMax){
result = nums2[j];
j++;
}
}
now++;
if(count%2 != 0){
if(now == (count/2 + 1)){
return (double)result;
}
}else{
if(now == (count/2)){
res = result;
}else if(now == (count/2 + 1)){
return (double)(result+res)/2.0;
}
}
}
}
}大神二分查找:

721

被折叠的 条评论
为什么被折叠?



